PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JDBC - Problem



Jor
18-12-2005, 18:51
Hallo zusammen,
wer kann mir einen Tipp zufolgendem Prob geben?
Ich möchte mit meiner Java-Anwendung auf meinen MySQl-Server zugreiffen. Aber ich bekomme stets Fehlermeldungen geliefert, einige Versuche habe ich schon durchgeführt, komme aber nicht weiter. Hier kommt mein Script:
import java.sql.*;
public class CallDB
{
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
//DriverManager.setLogStream(System.out);
try {
String url = "jdbc:mysql:MeinServer:3306";
Class.forName("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection( url, "benutzer", "passwort" );
System.out.println("es läuft!"); // ebend nicht! ;-)

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Wo liegt der Fehler....????
Der MySQL-Server läuft auf einem Linux-System und ist auch aus dem Web so wie lokal per Telnet erreichbar. Meine Entwicklungsumgebung ist Eclipse 3.0 unter Windows XP.

Caveman
18-12-2005, 19:01
Versuchs mal mit:

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Läuft nun der Treiber und kommt die Fehlermeldung erst beim Verbindungaufbau?
Wie heißt die Fehlermeldung?

Jor
18-12-2005, 19:04
Hallo Caveman,
danke für deine Antwort.
Habe deinen Eintrag eingefügt, abe rder Fehler kommt immer noch:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at CallDB.main(CallDB.java:27)

Caveman
18-12-2005, 19:42
Ich habe es befürchtet.
Gleiches Problem habe ich zur Zeit auch?
(SuSE Linux 10.0 und Eclipse 3.1.1)
Ich nehme mal an, Du hast den Treiber auch ins Projekt eingefügt.

Ich werde mich morgen oder übermorgen nochmal ausführlich mit diesem Problem auseinander setzen.

Edit: Vielleicht weiß in der Zwischenzeit jemand eine Lösung ;)

Caveman
18-12-2005, 21:06
Bin ein Stück weiter gekommen:

Mein Fehler war, dass ich den Treiber falsch eingebunden habe.


So bindet man den Treiber richtig bei Eclipse ins Projekt ein:
rechtsklick auf den Projektnamen (!Achtung! Nicht den Packagenamen)
Im Menü, das aufgeht, Properties auswählen.
Ein neues Fenster erscheint
dort Java Build Path auswählen
jetzt rechts mit Add External JARs... die Archiv-Datei mit dem Treiber angebenDas Archiv des Treibers heißt unter Linux mysql-connector-java.jar und ist im Verzeichnis /usr/share/java/ zu finden.

Hoffe das konnte Dir weiterhelfen.

Jor
19-12-2005, 07:40
@Caveman,

ich werde deinen Vorschlag heute abend direkt umsetzen, bin jetzt im Büro und habe hier keinen MySQL-Server z.V.. :( Aber wenn es so weiter geht, mal schauen:rolleyes:
Ich schreibe dir auf jeden Fall ob es dann funzt. Es könnte an dem vermuteten Problem liegen, bin noch kein erfahrener Java-Progger. Und solche Probs sind dann gern genommene Hindernisse ;) .
Danke!

Jor
19-12-2005, 20:10
Hi Caveman,

nöö, das war es (wohl) nicht. Ich habe unter Eclipse nicht die Schritte ausführen können, die du beschrieben hast.
Irgendwie haut das nicht hin (andere menüpunkte, oder ich setze nicht richtig um was du meinst).

mwanaheri
19-12-2005, 21:19
Ich mache es ehrlich gesagt (nach einem Tipp von (Peschmae?)) so, dass ich das .jar packe und dann die benötigten Bibliotheken beilege. Ich habe mir einen Ordner angelegt, in den alle benötigten externen jars entpackt werden. Der Rest geht mit dem Konqueror jedenfalls superleicht:
ein Fenster für mein Jar, draufklicken, Inhalt wird angezeigt.
Zweites Fenster für meinen Bibliothekenordner, alles markieren, in das andere Fenster ziehen und fertig. Das geht bestimmt auch sauberer, aber so klappt es hier wunderbar.

Jor
19-12-2005, 21:39
@mwanaheri,
also doch ein Jar erzeugen??? Aber ich möchte doch den Zugriff auf den MySQL-Server auch während der Programmierphase, daher werd eich wohl noch einwenig über Weihnachten basteln.
Ich programmiere mit Java unter winXP, der MySQL läuft auf Red Hat 9.0. :-))

Caveman
20-12-2005, 00:48
Ich kann leider nur für Eclipse unter Linux (habe ich auf dem eigenen Rechner) oder JBuilder unter Windows (ist an der FH) sprechen:
Du musst in jedem Fall eine jar-Datei einbinden. Diese gibt es z.B. unter http://dev.mysql.com/downloads/connector/j/3.1.html (ohne Gewehr; hab ich aus meiner Anleitung)
Unter JBuilder würde es dann so gehen, dass man Tools->Konfigurieren->JDKs auswählt und im Dialogfeld bei den Klassen die Datei mysql-connector-java-3.1.11-bin.jar hinzufügt.

Mach' mal direkt nach Class.forName("org.gjt.mm.mysql.Driver").newInstance(); eine Ausgabe: z.B. System.out.println("Treiber geladen");!
Sollte die nicht kommen stimmt was mit dem Treiber nicht.

Suche dann mal im Projektverzeichnis nach der Datei "Driver.class". Diese muss dann unter projektverzeichnis\org\gjt\mm\mysql stehen, während das eigentliche Programm unter projektverzeichnis\packagename steht (falls ein Package angelegt wurde)

Übrigens bei mir heißt das ganze "com.mysql.jdbc.Driver" und liegt dann folglich unter projektverzeichnis/com/mysql/jdbc.

Bei mir funktioniert's mittlerweilen, also wirst Du es auch noch bis Weihnachten schaffen ;)

Jor
20-12-2005, 07:16
@Caveman, moin moin,
ich habe mir ein Buch zu Eclipse geholt. Da war auch die Installation des Treibers, der auch mit geliefert wurde, aufgeführt. Für mich allerdings nicht tief genug. :(
Aber eine generelle Frage: Muss ich im OS noch etwas einrichten? Benutzer DSN oder System DSN? Oder.....? Im Buch stand davon nichts, habe jedenfalls nichts gefunden, aber in einer alten Unterlage (ca. 2 Jahre alt und allerdings für einen ODBC-Treiber) stand das ein DSN eingerichtet werden muss.

fuffy
20-12-2005, 10:42
Hi!


Aber eine generelle Frage: Muss ich im OS noch etwas einrichten? Benutzer DSN oder System DSN? Oder.....? Im Buch stand davon nichts, habe jedenfalls nichts gefunden, aber in einer alten Unterlage (ca. 2 Jahre alt und allerdings für einen ODBC-Treiber) stand das ein DSN eingerichtet werden muss.
Nein. Zum Einen betrifft das nur ODBC-Verbindungen, zum Anderen wäre das ja nicht plattformunabhängig, also für Java eigentlich unbrauchbar.

Du brauchst wirklich nur das Java Archiv (JAR) des Connectors in den CLASSPATH einzubinden.

Was mir grad auffällt: Der JDBC-ConnectionString müsste eigentlich so aussehen: jdbc:mysql://MeinServer:3306/MeineDb

Gruß
fuffy

Caveman
20-12-2005, 11:40
Wo genau tritt der Fehler auf?

Welche der folgenden Zeilen wird tatsächlich richtig ausgeführt:

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection con = DriverManager.getConnection( url, "benutzer", "passwort" );Keine von beiden oder die erste?

mwanaheri
20-12-2005, 12:35
Oh, jetzt gehen die Sachen etwas durcheinander. Sorry, ich dachte, die Bibliothek wird beim Ausführen der .jar nicht gefunden.
Also weiter vorn:
In Eclipse bindest du die Bibliothek ein, indem du auf das Projekt rechtsklickst, dann "Properties". Dort "Java Build Path", "Libraries", "Add External Jars", dann die entsprechende Datei auswählen, "ok".

Wo es dann hakt kannst du über die Exceptions erfahren:

Connection con; // du musst ja auch außerhalb des Aufrufes darauf zugreifen können.
try{
System.out.println("verbinde mit der Datenbank"); // damit du weißt, dass die Methode angesprungen wird
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
con = DriverManager.getConnection( url, "benutzer", "passwort" );
} catch (ClassNotFoundException cnfe) {
System.out.println("Klasse für die Datenbank nicht gefunden\n" + cnfe.getMessage());
System.out.println("Cause:" + cnfe.getLocalizedMessage());
} catch (SQLException sqlverbindung) {
System.out.println("Verbindung fehlgeschlagen:");
System.out.println(sqlverbindung.getMessage());
}
}

Welche Exception tritt auf?

Ich finde es übrigens riskant, eine Datenbank über das Web erreichbar zu machen. Da gehört ein Brokerprogramm dazwischen.

Caveman
20-12-2005, 17:13
@mwanaheri (http://www.mrunix.de/forums/member.php?u=9557)
Ich hab mal Deine Methode angwandt (über Properties->Java Build Path usw.)
Hört sich irgendwie besser an und funktioniert bei mir auch.
Jetzt sind die Treiber-Klassen nicht mehr im Projektverzeichnis, sondern der Treiber ist als Archiv im Projekt.

Hab auch meinen Beitrag vom 18-12-2005, 21:06 dahingehend geändert!

Jor
21-12-2005, 07:16
@fuffy, mwanaheri, Caveman,

vielen Dank! Im Moment sitze ich wieder im Büro und kann den Connect nicht prüfen bzw. neu einrichten. Da sich kein DSN brauche hatte ich auch so im Gefühl, aber ich war mir nicht sicher.
Also werde ich nochmal von vorne beginnen...:)