Problem bei MySQL Connect über JavaBean

Status
Nicht offen für weitere Antworten.

tenderman

Mitglied
Hallo zusammen,

versuche über JSP mit einer Bean eine MySQL DB zu connectieren. Conect klappt auch (denk ich), aber es kommt immer zu einer JavaNullPointerExeption wenn der Tabellename meiner Datenbank klein geschrieben ist, wenn ich den Namen der Tabelle groß schreibe funktioniert das Bean?! Problem ist, das ich mit mehreren JSPs auf die DB zugreife u der Name nun mal klein sein muss. Woran kann das liegen

Hier das Bean:

Code:
package DB; 
public class DBZugriff 
{ 
private java.sql.Connection dieVerbindung; 

public DBZugriff() 
{ 
try 
{ 
Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
dieVerbindung = java.sql.DriverManager.getConnection( 
"jdbc:mysql://localhost/dbbenutzer","root","root"); 
} 
catch(ClassNotFoundException e1){} 
catch(InstantiationException e2){} 
catch(java.sql.SQLException e3) 
{ 
System.out.println("SQLException: " + e3.getMessage()); 
} 
catch(IllegalAccessException e4){} 
} 

public java.sql.ResultSet leseDB() 
{ 
java.sql.Statement statement; 
java.sql.ResultSet tabelle; //Wird als Ergebnis übergeben 
try 
{ 

statement = dieVerbindung.createStatement(); 
tabelle = statement.executeQuery("SELECT * FROM BENUTZER"); 
return tabelle; 
} 
catch(java.sql.SQLException e3) 
{System.out.println("SQLException: " + e3.getMessage()); 
} 
return null; 
}

Laut Log-Dat vom Tomcat exetiert die Tabelle dbbenutzer.benutzer nicht.
Wenn ich einen schreibenden Zugriff auf die Datenbank über das Bean probiere, ist das Problem ähnlich. Nur wenn der Tabellenname GROSS geschrieben ist, er die Tabelle BENUTZER nicht kennt und wenn ich den Namen klein schreibe kennte er die Tabelle auch nicht. Wenn die Tabelle mit GROSSEN und kleinen Namen exestiert kommt es zur Fehlermeldung: Duplcate entry 1 for key 1?! Woran kann das liegen
Schon mal danke

MfG Tenderman
 
Tabellennamen in MySQL sind systemabhängig case-sensitiv oder eben nicht. Läuft die DB auf Windows ist es schnurz, läuft sie auf einem Unix, musst du sie in den Statements so schreiben, wie du sie angelegt hast, da MySQL für jede DB ein Verzeichnis anlegt und darin für jede Tabelle eine Datei, die gleich heißt wie die Tabelle. Und unter Unix ist "tabelle.frm" und "Tabelle.frm" nunmal nicht dasselbe...

PS:
Warum müssen deine Beans den Tabellennamen unbedingt klein schreiben? *amkopfkratz*
Groß-/Kleinschreibung machte in C schon vor Jahrzehnten dank Kerninghan und Ritchie keine Probleme mehr...
 
Die Beans müssen den Tabellennamen nicht unbedingt klein schreiben. Der Tabellenname sollte klein sein, weil auch anderen JSPs auf diese DB zugreifen sollen, wäre aber auch net so wild, wenn ich das ändern müsste... hauptsache es würde überhaupt gehen.
Das Problem ist, dass auch wenn alles Groß geschrieben ist (Tabellennamen in der DB und Abfragen in der Bean) es bei einem Datenbank eintrag auch zu der Fehlermeldung kommt. D.h: es steht dann in der Log-Dat des Servers: kann Tabelle dbbenutzer.benutzer nicht finden. Wenn ich den Tabellennamen dann klein schreibe kommt dann halt die Meldung: kann dbbenutzer.BENUZTER nicht finden!

Hier mal das komplette Bean:

Code:
package DB;
public class DBZugriff
{
 private java.sql.Connection dieVerbindung;
	// Konstruktor
 public DBZugriff()
 {
    try
    {
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    dieVerbindung = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/dbbenutzer","root","root");
  }
  catch(ClassNotFoundException e1)
                {
                     System.out.println("ClassNotFoundException: " + e1.getMessage());
                }
  catch(InstantiationException e2)
                {
                     System.out.println("InstantiationException: " + e2.getMessage());
                   }
  catch(java.sql.SQLException e3)
	 {
	    System.out.println("SQLException: " + e3.getMessage());
	 }
  catch(IllegalAccessException e4)
                {
                     System.out.println("IllegalAccessException: " + e4.getMessage());
                 } 
	}
 //Lesende Operation
 public java.sql.ResultSet leseDB() 
 {
  java.sql.Statement statement;
  java.sql.ResultSet tabelle;   try
  {
    statement = dieVerbindung.createStatement();
    tabelle = statement.executeQuery("SELECT * FROM BENUTZER");
        // das Select funktioniert, wenn der TabName GROSS ist
    return tabelle;
  }
  catch(java.sql.SQLException e3)
	 {System.out.println("SQLException: " + e3.getMessage());
	 }
  return null;
	 }

 //Schreibende Operation
public synchronized void schreibeDB(String pseudonym, String passwort)
    {
    String benutzernrString = "Leer";
    int benutzernr = 0;
    java.sql.Statement statement = null;
    java.sql.ResultSet tabelle = null;
    try
    {
      statement =  dieVerbindung.createStatement();
      tabelle = statement.executeQuery("SELECT MAX(BENUTZERNR) FROM BENUTZER");
      tabelle.next(); 
      benutzernr = tabelle.getInt(1); 
      benutzernr++; 
      benutzernrString = Integer.toString(benutzernr);
      String insert = "INSERT INTO BENUZTER (BENUTZERNR, PSEUDONYM, PASSWORT)";
      String values = "VALUES('" + benutzernrString + "','" + pseudonym + "','" + passwort + "')";
      statement.executeUpdate(insert + values);
	    
    }
    catch(java.sql.SQLException e3)
	   {System.out.println("SQLException: " + e3.getMessage());
	   }
		finally
		{
	                try
                                 {
                                  tabelle.close();//Freigabe der Ressourcen
	                  statement.close();//Freigabe der Ressourcen
                                  }
                  catch(java.sql.SQLException e3)
	       {System.out.println("SQLException: " + e3.getMessage());
	       }
	}
   }
}
 
D.h: es steht dann in der Log-Dat des Servers: kann Tabelle dbbenutzer.benutzer nicht finden. Wenn ich den Tabellennamen dann klein schreibe kommt dann halt die Meldung: kann dbbenutzer.BENUZTER nicht finden!

Wenn du es zweimal klein schreibst bekommste eben zweimal denselben Fehler, wenn es falsch ist.

Mein letzter Post enthielt schon den Lösungsweg. Mehr kann ich nicht tun.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben