# Gleiche Verbindung funktioniert einmal und einmal nicht



## Schuri (4. Jul 2007)

Hallo zusammen.

Ich verzweifel irgendwie grad. Ich habe zweimal genau den gleichen Code, aber er funktioniert nur einmal. Das finde ich irgendwie sehr seltsam.
Also: Ich möchte eine Verbindung zu einer Datenbank aufbauen. Dazu muss ich den Datenbanktreiber laden. Dies mach ich über:

```
// Laden des Treibers
            try {
                Class.forName("com.mysql.jdbc.Driver");
                // für MySQL: "com.mysql.jdbc.Driver"
                try {
                    verbindung = DriverManager.getConnection(server, user, passwrd);
                    // für MySQL: "jdbc:mysql://localhost/java"

                } catch(SQLException e) {
                    System.err.println("Verbindung ist fehlgeschlagen!");
                    System.err.println("  -> " + e.getMessage());
                }
            } catch(Exception e) {
                System.err.println("Kann Treiber nicht laden!");
                System.err.println("  -> " + e.getLocalizedMessage());
            }
```

Jetzt habe ich zwei unterschiedliche Programme. Bei einem funktioniert es und bei dem anderen nicht. Ich habe beide Programme in nem eigenen Package und habe den JDBC-Treiber zum einen in dem /ext/-Ordner und zum anderen auch in der CLASSPATH-Var drin. Interessant ist die Fehlerausgabe, wenn es nicht funktioniert.

_
Kann Treiber nicht laden!
  -> com/mysql/jdbc/Driver
_

Obwohl der eigentl. Treibername "com.mysql.jdbc.Driver" lautet. Bei der funktionierenden Version wird (wenn ich den Namen absichtlich falsch schreibe) der Name dann aber in der Fehlermeldung richtig angezeigt (also mit Punkten und nicht mit Slashs). Kann das ein Indiz sein?

Wäre euch über Hilfe super dankbar!
Hannes


----------



## SlaterB (4. Jul 2007)

auf jeden Fall solltest du noch 
e.printStackTrace() 
einfügen
und die beiden StackTraces vergleichen/ posten


wenn du mit der allgemeinen Classpath-Konfiguration nichts ausrichten kannst,
dann hilft z.B. die aufwendige Methode der Programmgleichmacherei:
erstelle sowieso erstmal in beiden Projekten/ Verzeichnissen/ was auch immer
nur eine kleine Textklasse mit main-Operation und DB-Zugriff

verwende haargenau das gleiche Startskript (bis auf Pfad zur Startklasse usw.)

verschiebe die Projekte, so dass sie im Dateisystem
in den Pfaden
Grundpfad/a
und
Grundpfad/b
liegen

wenn a geht aber b nicht, dann benenne b in c um und a in b, 
geht dann a (also das neue b) nicht mehr? 
wenn a doch noch geht, dann muss bei a als b irgendwas anders sein als bei dem anderen b

usw.


----------



## Guest (4. Jul 2007)

Ok, also StackTrace war ne gute Idee ) Hätt ich auch selber mal drauf kommen können ^^
Hier die Ausgabe:
_
Kann Treiber nicht laden!
  -> com/mysql/jdbc/Driver
java.lang.ClassNotFoundException: com/mysql/jdbc/Driver
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
_
Ich würde sagen, dass das Problem ist, dass der den String "com.mysql.jdbc.Driver" in "com/mysql/jdbc/Driver" umwandelt und diese Klasse gibt es nicht. Nur warum wandelt er dies um?!


----------



## SlaterB (4. Jul 2007)

diese Schreibweise sieht man öfters, darüber würde ich an deiner Stelle nicht weiter nachdenken
(auch wenn man sowas natürlich nie 100% ausschließen kann)

also du kannst es schon als Indiz verwenden, 
dass du z.B. unterschiedliche Java-Versionen oder Locales oder sonstige Einstellungen hast (wie du anfangs auch schriebst), 
aber dass ist (wohl) nicht die direkte Fehlerursache durch Schreibfehler!

zur Reparatur des Classpaths habe ich ja bisschen geschrieben,
auch wenn es nicht das Gelbe vom Ei ist


siehe auch
http://javacio.us/java.lang.ClassNotFoundException:_com/mysql/jdbc/Driver.html
vs
http://forum.de.selfhtml.org/archiv/2006/4/t127344/


----------



## Guest (4. Jul 2007)

Danke.

Ich habe aber den Fehler gefunden  Ich hatte irgend welchen Scheiß in meiner Classpath drin stehen.. keine Ahnung. Manchma is Eclipse schon seltsam ^^

Schönen Abend noch,
Hannes


----------

