Jdbc

Liebe/-r Experte/-in,

diese Tage lerne ich java per Autodidaktik.
Mein OS: Ubuntu 8.04
SQL: mysql server und client 5.0
JDBC Driver: libmysql-java 5.1.5+dfsg-2

Wie schreibe ich die Java src code richtig?
In meiner Test.java stehen zwei Zeilen wie folgt:
Class.forName(„com.mysql.jdbc.Driver“);
Connection con = DriverManager.getConnection( „jdbc:mysql://localhost/MyDB“ );

$ javac Test.java
$ java Test
SQLException: com.mysql.jdbc.Driver
SQLException: No suitable driver found for jdbc:mysql://localhost/MyDB

Bitte um eure Hilfe! Danke im voraus!
peter

Hast du das alles gemacht?
http://www.torsten-horn.de/techdocs/java-sql.htm#MySQL

Hallo Peter,

Class.forName(„com.mysql.jdbc.Driver“);
Connection con = DriverManager.getConnection(
„jdbc:mysql://localhost/MyDB“ );
$ javac Test.java
$ java Test
SQLException: com.mysql.jdbc.Driver
SQLException: No suitable driver found for
jdbc:mysql://localhost/MyDB

Laut Fehlermeldung wurde wohl der Treiber gefunden (entsprechendes JAR File ist also im Classpath), wenn die Datenbank „MyDB“ nicht existieren würde müsste es eigentlich auch eine andere Meldung geben. Diese Meldung deutet meiner Erfahrung nach auf eine falsche JDBC URL hin (wenn man z.B. den Doppelpunkt vor dem Doppel-Slash vergisst), das was du gepostet hast sieht allerdings gut aus, ich habe eben eine vergleichbare Klasse erfolgreich getestet. Aus diesen beiden Codezeilen kann ich keinen Fehler erkennen.

Gruß
Heavy

Hast du das alles gemacht?
http://www.torsten-horn.de/techdocs/java-sql.htm#MySQL

Danke, Max!
Inzwischen habe ich mein Problem gelöst, mit der Class Properties.

schönen Abend noch!
peter

Hallo Peter.

Liebe/-r Experte/-in,

diese Tage lerne ich java per Autodidaktik.
Mein OS: Ubuntu 8.04
SQL: mysql server und client 5.0
JDBC Driver: libmysql-java 5.1.5+dfsg-2

Wie hast du den Treiber für den Compiler eingebunden?
Eine Möglichkeit ist, das .jar Paket in ext Ordner vom SDK zu kopieren.

Ausserdem gehört in den Code noch ein import der Classe, falls nicht schon geschehen.

Viele Grüße,

Leon

Wie schreibe ich die Java src code richtig?
In meiner Test.java stehen zwei Zeilen wie folgt:
Class.forName(„com.mysql.jdbc.Driver“);
Connection con = DriverManager.getConnection(
„jdbc:mysql://localhost/MyDB“ );

$ javac Test.java
$ java Test
SQLException: com.mysql.jdbc.Driver
SQLException: No suitable driver found for
jdbc:mysql://localhost/MyDB

Bitte um eure Hilfe! Danke im voraus!
peter

Hallo,

Der JDBC-Treiber ist nicht Teil der Java-Standardklassen sondern von einer Klassenbibliothek. Diese musst du irgendwo als .jar-Datei haben und in den Java-Aufruf einbinden.

Dein zweiter Aufruf sollte also so aussehen:

java -classpath / Test

Im classpath-Parameter kannst du auch mehrere .jar-Dateien mit Strichpunkt getrennt angeben. Siehe auch hier:

http://java.sun.com/j2se/1.3/docs/tooldocs/win32/cla…

Schöne Grüße, Robert

Hallo Peter,

wenn du noch dabei bist, dir Java selber bei zu bringen, dann empfehle ich dir das sehr gute openbook „Java ist auch eine Insel“. Unter http://openbook.galileocomputing.de/javainsel8/index… kannst du es kostenfrei abrufen und auch runter laden. Mir hat es in der Anfangsphase sehr geholfen.

Was deine Frage betrifft, scheint mir als ob der Treiber nicht im Classpath liegt und somit vom Classloader nicht geladen werden kann. Überprüfe ob der Treiber korrekt eingebunden ist und schau dir die Beispiele im openbook und das Handbuch von mysql unter http://dev.mysql.com/doc/refman/5.1/en/connector-j-r… an.

Gruß
Wahed

Danke, Heavy! Es klappt jetzt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke dir, Leon!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke Robert!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Die online-Dokus kann ich sehr gut gebrauchen. Dank und schönen Abend noch!
peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wie schreibe ich die Java src code richtig?
In meiner Test.java stehen zwei Zeilen wie folgt:
Class.forName(„com.mysql.jdbc.Driver“);
Connection con = DriverManager.getConnection(
„jdbc:mysql://localhost/MyDB“ );

$ javac Test.java
$ java Test
SQLException: com.mysql.jdbc.Driver
SQLException: No suitable driver found for
jdbc:mysql://localhost/MyDB

Hallo,

Die gezeigte Fehlermeldung tritt dann auf, wenn der Java-Treiber-Manager anhand der URL keinen passenden JDBC-Treiber finden kann. Typische Ursachen:

  1. Der Treiber wurde nicht im Treiber-Manager registriert.
  2. Die Datenbank-URL enthält Syntaxfehler, entspricht also nicht dem Format, das der spezielle JDBC-Treiber erwartet.
    Die URL sieht meines Erachtens richtig aus. Die unter 1) angesprochene Registrierung passiert normalerweise automatisch beim Laden mit Class.forName. Zur Sicherheit könnte man diese Registierung aber selber ausführen indem man die Zeile Class.forName …
    durch folgende Zeilen ersetzt:
    Driver driver = new com.mysql.jdbc.Driver();
    DriverManager.registerDriver(driver);
    Falls es nach dieser Änderung immer noch nicht funktioniert, kann man versuchen, direkt die connect-Methode des Treibers aufzurufen, also driver.connect(url,user,passwort). Falls die dann eine Exception produziert, sollte man zumindest einen Hinweis erhalten, ob vielleicht doch die Syntax der URL bei diesem speziellen Treiber eine andere ist, als in früheren Treiberversionen.

Mit freundlichen Grüßen

Michael Skusa

Hallo Michael!
Danke für deine ausführliche Antwort. Das Problem habe ich inzwischen gefixt.

Äh - Hier ist noch ein neues Problem (Ich habe immer wieder einige unterschiedlichste Fragen). Wie kann ich den Character set generell auf utf8 umstellen, da latin1 so wieso nicht mehr zeitgemäß ist? Bei mir ist der Server eben der localhost. Der ist auch nicht produktiv.
Bei Java ist utf8 als defaulter Zeichensatz und mit MySQL kann ich auch mit utf8 exotische Zeichen ausgeben lassen. Nur getrennt klappt es. Wenn ich über Java die MySQL-Tabelle ändern und ausgeben möchte, bekomme ich Ausgaben leider nicht wie gewünscht.
Heute habe ich im Internet intensiv danach gesucht. Kaum erfolgreich. Hast Du vielleicht eine Idee, Characterset generell auf utf8 einzustellen?

Dank im voraus!
peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Mit den Zeichensätzen ist die Sache (übrigens bei jeder DB) ein bißchen kompliziert:

  • die Datenbank besitzt einen Zeichensatz, mit dem sie intern ihre Zeichen darstellt (bei MySQL in my.ini konfiguriert)
  • ein Java-Programm besitzt einen Zeichensatz, mit dem es seine Zeichen darstellt (bei Java standardmaessig UTF8)
  • die Kommandozeile/Shell des Betriebssystems besitzt ebenfalls ihren eigenen Zeichensatz (z.B. ISO-Latin oder Win1252)
    Man sieht immer nur „richtige“ und vor allem dieselben Zeichen, wenn alle Clients denselben Zeichensatz benutzen oder eine Umwandlung in ihren Zeichensatz kennen. Das klappt meist am besten, wenn die DB mit einem möglichst großen Zeichensatz konfiguriert ist (UTF8).

Eine Änderung dieser Einstellung in der my.ini wirkt sich meines Wissens nicht auf bestehende DBs/Tabellen aus. Man sollte also gleich beim Erzeugen der Datenbank UTF8 angeben, wenn man sichergehen will, dass alle Tabellen später UTF benutzen. Die Kommandozeilen-Tools von MySQL sollten ohne besondere Einstellungen mit UTF klarkommen. Ein selbstgeschriebenes Java-Programm sollte auch auf Anhieb und ohne spezielle Einstellungen funktionieren.

Wurde die DB mit iso-latin angelegt, dann kann es sein, dass Umlaute u.ä. nur richtig angezeigt werden, so lange sie mit demselben Programm/Werkzeug bearbeitet werden. Ein Java-Programm hat ein bestimmtes Mapping „seines“ UTF-Zeichensatzes auf den iso-latin der DB. Ein in C programmierter Client hat möglicherweise ein anderes Mapping seines Zeichensatzes auf iso-latin. D.h., Daten, die mit einem Client eingefügt wurden, können mit einem anderen Client unterschiedlich angezeigt werden.

schönen Dank, Michael!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]