Keine Datenbankverbindung, wieso? (ClassNotFoundEscpetion)

Status
Nicht offen für weitere Antworten.

Hatebreed

Mitglied
Hallo,

ich bin kurz vor der Verzweiflung.
Ich habe mich durch viele Foren gelesen, Tutorials angeschaut,
bin den Anweisungen meines Javabuchs gefolgt ABER ich bekommen keine Verbindung zur Datenbank, aber wieso, was mache ich falsch?

Folgendes habe ich installiert:
- jdk-6u13-windows-i586-p.exe
- xampp-win32-1.7.0-installer.exe
- Datenbank erstellt
- TestPadv. 473

Desweiteren habe ich mir den MYSQL Connector mit der Version 5.1.7 runtergeladen.
Die Datei "mysql-connector-java-5.1.7-bin.jar" habe ich dann in das Jave JDK/bin verzeichnis gepackt (also in meinem Fall in "C:\Programme\Java\jdk1.6.0_13\bin").
Die restlichen Dateien des Connectors habe ich unbeachtet gelassen.

Anschließend habe ich unter Umgebungsvariablen unter der Variable "Path" folgendes ergänzt: ";C:\Programme\Java\jdk1.6.0_13\bin"

Da wir in der Schule Java erlernen, habe ich das alles schon sehr oft erfolgreich hinbekommen, aber zu Hause funktioniert es nicht!

Wenn ich mit meinem Programm auf die Datenbank zugreife, bekomm ich jedes mal folgende Fehlermeldung:
Fehler:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Warum funktioniert das nicht? Kann mir das einer erklären? Was mache ich falsch, in der Schule hat es ja wie gesagt so funktioniert.

Unser Lehrer hat uns zum Überprüfen der DB Verbindung folgendes Programm gegeben:
[HIGHLIGHT="Java"]import java.sql.*;

public class Datenbank1
{

public static void main(String argv[] )
{
try // Behandlung von Ausnahmesituation
{
Class.forName ("com.mysql.jdbc.Driver"); // Treiber für MySQL
System.out.println("Treiber erfolgreich geladen...");
}//try
catch(ClassNotFoundException e)
{
System.out.println("Fehler beim laden des Treibers" +e);
System.exit(0);//Abbruch des Programm
}//catch(ClassNotFoundException e)
}//public static void main(String argv[] )
}//public class DatenbankVersion1[/HIGHLIGHT]

Wenn ich das ausführe, erhalte ich auch die Fehlermeldung
Fehler beim laden des Treibers "java.lang.ClassNotFoundException: com.mysql.jdbc.Driver"

Ich wäre euch sehr Dankbar wenn ihr mir helfen könntet.

Vielen Dank für Antworten im voraus.

mfg Hatebreed
 
Zuletzt bearbeitet von einem Moderator:
wenn du unsauber arbeiten willst, dann gehört die jar in
C:\Programme\Java\jdk1.6.0_13\lib
nicht in
C:\Programme\Java\jdk1.6.0_13\bin

besser wäre aber ein neutrales Verzeichnis und dies beim Programmstart angeben:
java -cp .;c:/myLib/mysql.jar MeinProgramm
 
wenn du unsauber arbeiten willst, dann gehört die jar in
C:\Programme\Java\jdk1.6.0_13\lib
nicht in
C:\Programme\Java\jdk1.6.0_13\bin

besser wäre aber ein neutrales Verzeichnis und dies beim Programmstart angeben:
java -cp .;c:/myLib/mysql.jar MeinProgramm

Danke für deine Hilfe!

ist das wirklich so?
da hat unser Lehrer aber seit 6 Monaten was falsches erzählt...
Naja, habe die .jar jetzt in C:\Programme\Java\jdk1.6.0_13\lib gepackt, die Variable "Path" auch abgeändert.
Aber leider keine Besserung, der Fehler bleibt der gleiche.
🙁
 
Anschließend habe ich unter Umgebungsvariablen unter der Variable "Path" folgendes ergänzt: ";C:\Programme\Java\jdk1.6.0_13\bin"
meinst wohl PATH? kA, ob da groß-kleinschreibung was ausmacht...
ja, das ist sinnvoll, wenn du auf javac.exe und java.exe von überall zugreifen willst.

Den Compiler interessiert die PATH-variable allerdings wenig. Du musst den ordner, wo die externen jar's liegen an CLASSPATH nach einem semikolon dranhängen, nicht an PATH... weiß nicht ob das schon explizit erwähnt wurde... ???:L
 
stimmt, klappt bei mir derzeit auch nicht,
vielleicht helfen diese Verzeichnisse von selber gar nicht, sondern erst wenn eine Systemvariable CLASSPATH darauf zeigt,
dann empfehle ich immer noch lib, oder bin oder ein ganz anderes Verzeichnis wäre immer noch denkbar,
. nicht vergessen

oder wie gesagt beim java-Befehl mit dazutippen
 
meinst wohl PATH? kA, ob da groß-kleinschreibung was ausmacht...
ja, das ist sinnvoll, wenn du auf javac.exe und java.exe von überall zugreifen willst.

Den Compiler interessiert die PATH-variable allerdings wenig. Du musst den ordner, wo die externen jar's liegen an CLASSPATH nach einem semikolon dranhängen, nicht an PATH... weiß nicht ob das schon explizit erwähnt wurde... ???:L

ok das wundert mich etwas, ham wir in der Schule auch nie gemacht, lief trotzdme, aber ich werds mal machen.
Da "CLASSPATH" nicht existiert, hab ich die Variable neu erstellt, also:
Name der Variable: CLASSPATH
Wert der Variable: C:\Programme\Java\jdk1.6.0_13\lib

müsste so stimmen oder?

Leider immernoch nicht^^
Ich bin über jede Hilfe Dankbar 🙂
mfg Hatebreed
 
.;C:\Programme\Java\jdk1.6.0_13\lib\*
(Punkt am Anfang wichtig!)
oder den Namen der Jar komplett hinschreiben
 
Da "CLASSPATH" nicht existiert, hab ich die Variable neu erstellt
öhm... das finde ich ehrlich gesagt etwas merkwürdig ???:L 😳
ich dachte eigentlich dass sie bei der installation des jdk's auf irgeneinen sinnvollen wert gesetzt.
Name der Variable: CLASSPATH
Wert der Variable: C:\Programme\Java\jdk1.6.0_13\lib

müsste so stimmen oder?
Vorausgesetzt du hast das externe jar in das normale lib-verzeichnis gepackt, ja...
(wird imho normalerweise nicht empfohlen, ich lasse die ganzen externen jars immer neben dem normalen jdk-ordner liegen, und füge die komplett zu CLASSPATH hinzu, so durchmischt sich da nichts.

Hmm... kA? Habe momentan keine weiteren Vorschläge, außer dass du dich vertippt hast. :bahnhof:

@SlaterB: sicher das mit den sternchen? Hab das bei meinem classpath irgendwie nirgends entdecken können.

@Hatebreed: achso, mir fällt da grad auf: bei jar's muss der cp so angegeben werden:
Code:
.;.;#allesAndere#;C:\Programme\WoAuchImmer\nameDesJars.jar;#usw...#
 
Zuletzt bearbeitet:
bei der Installation kein ClassPath, das ist ja sowieso die beste Einstellung

das mit den * hatte ich gerade beim Testen bei
java -cp .;c...../lib/* Test
erfolgreich verwendet, obs in ClassPath geht, keine Ahnung
 
Ihr habt beid Recht gehabt. Ich habe beide Varianten ausprobiert und es funktioniert beides! VIELEN DANK!!! 😀

Joa es war wirklich noch keine CLASSPATH vorhanden.
Hatten wir aber auch in der Schule nie...

Jetzt klappt das testprogramm, nur bei meinem Progg is immer noch die gleiche sch**ße...
oh man, wieso kann das net funzen.

Ich zeig euch mal den Code, vlt. ist da ein Fehler:

(achso der Code is net fertig, aber wenn das mit dem Treiber nicht funktioniert kann er auch net fertig werden, da ich nichts ausprobieren kann^^)

[highlight=Java]
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.sql.*;

public class Test extends Applet implements ActionListener{

MouseListener myMouseListener = new MouseListener ();

Image Sitzplan;
String farbe = "#ff0000";
String farbe1 = "#00ff00";
int zx [] = {10, 60, 190, 240, 286, 329, 379, 501, 546 };
//int zy [] = {140, 180, 220, 260};
int zy [] = {260, 220, 180, 140};
int k=0;
int x=0;
int y=0;

TextArea tf1 = new TextArea ();
String meldung = "";
String ergebnis = "";
String antwort = "";

String treiber=null,
DbUrl=null ;

Connection dbVerbindung=null;
ResultSet resultSet=null;
Statement sqlStatement=null;

Panel panelOben;
Panel panelUnten;

String zid [] = new String[36];
int zb [] = new int [36];

int zNr;




public void init() {



for(int i=0; i<36; i++){
zb=0;
}



hotel1 = getImage (getDocumentBase (), "grandhotel.gif");

treiber = "com.mysql.jdbc.Driver";
DbUrl = "jdbc:mysql://localhost/grandhotel" ;

this.setLayout (new BorderLayout());

panelOben = new Panel ();
panelUnten = new Panel ();

add (panelOben, BorderLayout.NORTH);
add (panelUnten, BorderLayout.SOUTH);

this.addMouseListener(myMouseListener);


panelUnten.add (tf1);





try {
// Datenbanktreiber laden

Class.forName( treiber ).newInstance();

// Verbindung zum Datenbankserver aufbauen
// Der User root ohne Kennwort " " m?chte sich anmelden

dbVerbindung = DriverManager.getConnection( DbUrl,"root","");



if(dbVerbindung!= null ) {

meldung += "Verbindung zum Datenbankserver hergestellt\n" ;
}
}



catch ( Exception ex ) {

meldung += "Fehler: \n" + ex.toString();
}

tf1.setText(meldung);


if (dbVerbindung != null) {

String frage ="hier die SQL abfrage";
String antwort = "";
int j=0;



try
{
sqlStatement = dbVerbindung.createStatement();
resultSet = sqlStatement.executeQuery(frage);
ResultSetMetaData rsmd = resultSet.getMetaData();



while (resultSet.next())

{


zid[j] = resultSet.getString(1);





ergebnis = zid[j];

zb[j] = Integer.parseInt(ergebnis);



j++;

}


// tf1.append(zb[j]);




resultSet.close();
sqlStatement.close();



}
catch(SQLException ex)
{
antwort += "\n Fehler\n " + ex.toString() ;
}

tf1.append(antwort);
}
else
tf1.append("Keine Verbindung zur Datenbank");

}





[/highlight]
 
Zuletzt bearbeitet:
Ihr habt beid Recht gehabt. Ich habe beide Varianten ausprobiert und es funktioniert beides!
lol :autsch:

Jetzt klappt das testprogramm, nur bei meinem Progg is immer noch die gleiche sch**ße...
[...]
Ich zeig euch mal den Code, vlt. ist da ein Fehler
"die gleiche scheiße" ist keine allzu konstruktive Problembeschreibung. Bitte um Auflistung der Errors/Exceptions bzw beschreibung des erwarteten und eingetretenen Verhaltens. Mit irgendeiner scheiße können wir hier leider nicht direkt was anfangen...
Ist da jetzt ein fehler oder nicht?

Nächstes mal bitte [noparse][HIGHLIGHT=Java]code[/HIGHLIGHT][/noparse] verwenden, bzw in deinem Beitrag gleich editieren, bei Zitaten werden die Einrückungen nicht beibehalten, sieht total verschrottet aus.
 
grundsätzlich: java will es oft genau. also weniger herum probieren und pfuschen sondern genau lesen und das richtige machen...

Ich habe mich durch viele Foren gelesen, Tutorials angeschaut,
Die Datei "mysql-connector-java-5.1.7-bin.jar" habe ich dann in das Jave JDK/bin verzeichnis gepackt
ich kenne unzählige tuts zum thema jdbc aber das hat noch nie jemand geschrieben...
 
tut mir leid für die unsachliche Antwort
aber ich gerate langsam etwas unter Zeitdruck und da ich schon so viel Zeit damit verbracht habe macht es mich auch langsam wahnsinnig

also folgendes:
Zitat:
Die Datei "mysql-connector-java-5.1.7-bin.jar" habe ich dann in das Jave JDK/bin verzeichnis gepackt
ich kenne unzählige tuts zum thema jdbc aber das hat noch nie jemand geschrieben...
das hat uns unser Lehrer so in der Schule, ich weiß nicht wie oft, erklärt und wir haben das auch erfolgreich so durchgeführt.
Schon doof wenn einem die Sachen dann falsch beigebracht werden...
aber das bringt mir leider jetzt auch nichts 🙁

die gleiche scheiße" ist keine allzu konstruktive Problembeschreibung
tut mir leid, hast ja recht^^

also hier handelt es sich um ein Applet, welches ein textfeld beinhaltet.
In dem textfeld sollen Abfragen zu der Datenbank ausgegeben werden.
Momentan wird leider nur folgendes ausgegeben:
Fehler:
"java.lang.ClassNotFoundException: com.mysql.jdbc.DriverKeine Verbindung zur Datenbank"

könnt ihr irgendwo einen Fehler finden?
Vielen Dank schonmal

mfg Hatebreed
 
Zuletzt bearbeitet:
Ööööhm, woran es konkret liegt kann ich dir leider nicht sagen, aber ich möchte darauf hinweisen, dass Applets so ziemlich auf gar nichts zugreifen dürfen, es sei denn sie sind signiert. Sonst dürfen sie lediglich Verbindungen zum Server aufbauen, von dem sie gestartet wurden.

Klappt es aus einer Applikation heraus auch nicht? (wäre ein versuch wert, so schaltest du zumindest nicht drei potentielle probleme in eine reihe...)
 
Hab grad kein Windows zur Hand. Aber wenn es sich um ein JDK und kein JRE handelt, sollte der Pfad dann nicht C:\Programme\Java\jdk1.6.0_13\[highlight]jre\[/highlight]lib lauten?

Ebenius

Also me hat windows und schon x tuts durchgeblättert und in mehr als 95% aller fälle sagen diese das external jar/libs in diesem Pfad landen:

...\jdk\jre\lib\ext

Dieser wird dann in den CLASSPATH geschrieben....und das wars auch schon....

Sollte es wirklich sein das der Treiber immernoch nicht gefunden wurde....

Ein tipp: "Probier es mal so: Nimm den "com" und den "org" Ordner aus dem Verzeichnis wo der mysql-connector drin war und kopier sie inden src ordner..."
So hat er den treiber aufjedenfall und es interessiert ihn schon gar nicht ob der irgendwo im Classpath steht oder ob die Jar seperat als Lib einem Projekt hinzugefügt wurde....so ist der ordner: "com.mysql.jdbc" mit Driver.java einfach vorhanden...


Matt
 
@Ebenius
man müsste vielleicht auch vor allem die Path-Variable umbiegen,
aber in allen Varianten sehe ich ohne ClassPath keinen Erfolg

edit:
so langes Post danach, gar nicht ganz gelesen 😉
jo, mit lib\ext gehts ohne ClassPath
(gibts nur im jre/lib-Unterverzeichnis, egal ob der Path auf jdk/bin oder jdk/jre/bin zeigt)
 
Zuletzt bearbeitet von einem Moderator:
vielen Dank für die Antworten
ich werde die andern varianten nochmal ausprobieren, aber ich glaube nicht dass es besser wird.

wodran es jetzt liegt dass das Programm "Datenbank1" jetzt auf einmal funktioniert, aber der eigentliche code nicht, weiss keiner oder?
 
startest du das Programm denn über den gleichen Befehl oder macht das nicht viel eher ein Browser?

in letzterem Fall ist das ja ein spezielles Applet-Problem,
ich weiß dazu nix
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben