JDBC Treiber auf Client UND(?!) Server??

Diskutiere JDBC Treiber auf Client UND(?!) Server?? im Developer Network Forum im Bereich Hardware & Software Forum; hallo leute.. ich habe eine frage die mich so ein bisschen quält: wenn ich auf einem externen server mit eine selbstgeschriebene java...
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #1
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
hallo leute..

ich habe eine frage die mich so ein bisschen quält:

wenn ich auf einem externen server mit eine selbstgeschriebene java applikation zugreifen möchte, muss dieser jdbc treiber bei mir (client - windowsXP rechner) oder nur auf dem server (linux system) oder auf beiden installiert sein?

wenn ich in einem tutorial zB. den satz:
"... erst die treiber laden..."
lese, dann müsste das doch heißen dass der nur bei mir installiert sein muss oder nicht??

weil im moment bekomme ich eine meldung:
"no suitable driver found for jdbc:mysql://IPAdresse"

danke :)
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #2
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Den Treiber muss Dein Client laden und muss zur Datenbank, auf die Du zugreifen möchtest, passen. Damit er gefunden wird, muss er im Classpath sein. Dann den Treiber mit Class.forName(...) laden und Du kannst ihn verwenden.
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #3
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
vielen dank mein freund für deine antwort..
das habe ich dann am ende doch noch so verstanden (also ich meine bevor deine antowrt kam) und so habe ich es auch gemacht..
den ordner "com.mysql.java.Driver" habe ich auch in dem projekt ordner auch drinne (sonst sagte er mir immer er findet das nicht)..
nur es ist trotzdem ein bisschen komisch weil:
die mysql-connector-java.jar datei die habe ich sowohl in dem ordner wo die anwendung liegt, als auch in den java ordner und zwar im bin ordner..
ich habe als classpath: "c:\Programme\Java\java1.6.0_18\bin\mysql-connector-java.jar" angegeben..

mit:
Code:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
oder mit:
Code:
Class.forName("com.mysql.jdbc.Driver").newInstance();
meckert er mir gar nicht mehr, also scheint es also ob die treiber geladen werden..
sobald ich nun die verbindung aufbauen möchte mit:
Code:
con = DriverManager.getConnection("jdbc:mysql://meineIPvomServer/database","user","passwd");
kommt das hier:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mysql/jdbc/StringUtils
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:269)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Example1.main(Example1.java:17)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.StringUtils
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more


was ist den nun los?
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #4
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

er findet die Klasse "StringUtils" im Package "com.mysql.jdbc" nicht. Schau doch mal, ob sie in Deinem eingebundenen Package liegt und wenn ja, pruefe nochmal den Classpath.

//Edit: Uebrigens waere der "richtigere" Pfad fuer zusaetzliche jars "jre/lib/ext", nicht "jre/bin".

Gruss, FFNB.
 
Zuletzt bearbeitet:
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #5
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
hey super danke für die schnelle antwort :)

also dass er diese klasse nicht findet weiss ich ja auch..
das sagt er mir ja ne? :)
wie auch immer.. mir ist vorhin aufgefallen, dass ich beim nachgucken (wie gestern schon getan) mich ein bisschen vertan habe, ich bin näblich hingegangen und siehe dort: StringUtils.java ist da.. ok..
ne eben nicht ok: nur die java datei ist da.. die .class nicht..
also hast du recht der findet die nicht weil die ja nicht da ist..
ich weiss jetzt diese .java datei kann ich so nicht kompilieren..

wie kann ich nun vorran gehen damit?

classpath: c:\programme\java\jdk1.6.0_18\bin\mysql-connector-java\mysql-connector-java-5.1.11-bin.jar

any ideas? :)

//EDIT: ich habe schon im internet über 100 beiträge bzw. tutorials gelesen, dass das egalo sein soll, man kann auch zB. in C:\Temp das rein tun, hauptsache der Path ist ok..
ich hatte das auch in /ext drinne schon.. ist aber auch nicht ok gewesen aber ok wenn du meinst dann tuh ich das da wieder rein :)
 
Zuletzt bearbeitet:
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #6
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

ich hab mir gerade mal testweise das "mysql-connector-java-5.1.11.zip" von hier heruntergeladen. In dem darin enthaltenen "mysql-connector-java-5.1.11-bin.jar" liegt die Klasse "com\mysql\jdbc\StringUtils.class" fertig compiliert.

Gruss, FFNB.
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #7
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
Halloechen,

ich hab mir gerade mal testweise das "mysql-connector-java-5.1.11.zip" von hier heruntergeladen. In dem darin enthaltenen "mysql-connector-java-5.1.11-bin.jar" liegt die Klasse "com\mysql\jdbc\StringUtils.class" fertig compiliert.

Gruss, FFNB.

mein freund vo genau da habe ich es gestern auch runtergeladen..
und die wahrheit ist, ich habe gerade dieses jar archiv entpackt und da waren alle classen drinne.. also fast alle weil jetzt meckert er über die /log/LOG/ klasse, dass der die nicht findet..
wir sollen doch gar nicht dieses jar archov entpacken oder wie jetzt?
deswegen der classpath..
wasd soll cih den mit diesen allen .java dateien wenn die .class dateien nicht da sind???

das sieht irgendwie so aus also wäre dieses archiv unvollständig oder was weiss ich..

in dieser seite als auch in den anderen steht:
-treiber runterladen
-entpacken
-classpath auf das jar archiv setzen
-fertig

was soll das ganze gedösel jetzt???
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #8
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen (mein Freund :) ),

genau so solltest Du es machen:

- Archiv "mysql-connector-java-5.1.11.zip" herunterladen
- Archiv "mysql-connector-java-5.1.11.zip" irgendwohin entpacken
- Das Package "mysql-connector-java-5.1.11-bin.jar" ins "jre/lib/ext" (hat den Vorteil, dass Du es dann nicht extra im Classpath auffuehren musst, hierbei musst Du aber beachten, dass Du bei mehreren installierten JDKs oder JREs auf dem Rechner das richtige nimmst) oder eben alternativ extra das "mysql-connector-java-5.1.11-bin.jar" mit in den Classpath packen.
- Alles andere aus dem Packet (die darin enthaltenen Sourcen etc.) brauchst Du nicht.

Wenn du das so machst, dann sollte er auch alles finden.

Welche Log-Klasse findet er denn wo nicht. Schick mal den Stacktrace.

Gruss, FFNB.
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #9
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
mein freund vielen dank für deine antworten und deine mühe..

1) ich dürfte nicht den ganzen ordner da rein packen, ich musste also den inhalt des ordners (opder wie du schonsagtest nur die jar datei reicht auch) in diesem /ext ordner rein tun!!!

und:

2) nachdem man java installiert hat, sieht der verzeichnissbaum so aus:

java
/ \
jdk1.6.0 jre
/ | \ / \
jre bin .... ... lib/ext


es muss also in java/jre/lib/etx rein...
und nicht in java/jdk1.6.0/jre/lib/ext

jetzt geht es :)

danke..

im moment habe ch problem mit der datenbank zu verbinden weil ich bekomme die exception : Connections link failure

dabei schreibe ich denke ich mal das richtige:
Code:
con = DriverManager.getConnection("jdbc:mysql://IPvonmeinemServer/testdb","user","passwd");

aber irgendwie kriege ich es raus wieso der nicht verbindet..
es sei den du oder jemand anderes weiss es :))))

und nochmals danke für die hilfe
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #10
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

schick doch bitte bei Exceptions immer den komletten StackTrace mit. Das macht es einfacher.

Gruss, FFNB.
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #11
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
also das war der komplette stacktrace..

ich wollte nochmal fragen, wieso es so schwierig sein muss, sich mit einer externen datenbank zu verbinden..

hier habe ich nun meinem code:

Code:
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class CConnectorToDB
{
    public static String driverDB = "jdbc:mysql://";
    public static String  host = "dieIPdesServers";
    public static String port = "3306";
    public static String dbName = "testdb";
    public static String user = "username";
    public static String passwd = "password";

    public static void main(String args[])
    {
        Connection con = null;
        System.out.println("Starting connect progress");

        try
        {
            //Class.forName("org.gjt.mm.mysql.Driver");
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            //if(!con.isClosed())
            //System.out.println("Successfully connected to MySQL server using TCP/IP...");
        }
        catch(Exception e)
        {
            System.err.println("Exception: " + e.getMessage());
        }
        try
        {
            con = DriverManager.getConnection(driverDB + host,user,passwd);
        }
        catch(Exception e)
        {
            System.out.println("Connect-Exception: " + e.getMessage());
        }
        finally
        {
            try
            {
                if(con != null)
                con.close();
            }
            catch(SQLException e) {}
        }
    }
}

und ich bekomme nun das hier:

Code:
Communications link failure
The last packet sent succesfully to the server was 0 millisecons ago. The driver has not received any packets from the server.


warum?

auf die externe DB kann jeder zugreifen, also rechte-problem gibt es nicht..
ob ich port oder nicht mit eingebe ist egal, standard bei mysql ist der 3306, und das ist auch bei mir so..

wieso will er nicht?
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #12
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
ich wollte nochmal fragen, wieso es so schwierig sein muss, sich mit einer externen datenbank zu verbinden..
So schwierig ist das nicht. Sind eigentlich nur ein paar Zeilen ;-)
Dein Code sieht soweit gut aus. Muss also an was anderem liegen.

auf die externe DB kann jeder zugreifen, also rechte-problem gibt es nicht..
ob ich port oder nicht mit eingebe ist egal, standard bei mysql ist der 3306, und das ist auch bei mir so..
Sicher? Schon mal ein anderes Tool probiert? Netbeans oder Eclipse haben beide einen DB-Explorer. Oder einfach mal telnet IPderDB 3306. Da sollte eine Verbindung zustandekommen.

Edit: Ich sehe nirgends den Datenbanknamen. Probier mal:
Code:
con = DriverManager.getConnection(driverDB + host + "/" + dbName,user,passwd);
 
Zuletzt bearbeitet:
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #13
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
So schwierig ist das nicht. Sind eigentlich nur ein paar Zeilen ;-)
ich weiss, die zeilen habe ich ja auch, aber bisher noch nichts :(

Dein Code sieht soweit gut aus. Muss also an was anderem liegen.
100%!! ich habe mittlerweile total andere befürchtungen

Oder einfach mal telnet IPderDB 3306. Da sollte eine Verbindung zustandekommen.
also, mittlerweile habe ich folgendes beobachtet:
-ich habe gestern mit telnet IPdesServers keine verbindung bekommen.
-ich habe auch mit telnet IPdesServers 3306 auch keine verbindung
-auf dem server war "skip-networking" bei der conf-datei von mysql off..
jetzt habe ich sie on gemacht (mysql neugestartet) und mit telnet kommt trotzdem nichts..
-ich habe mit mysql_conf --port den port 3306 bekommen (so sollte es ja auch sein)
-ich habe versucht offene ports oder was auch immer für ports versucht auf dem server rauszulesen und dann alle diese mit telnet gemacht..
nichts von allem geht...
-ich glaube so langsam stimmt alles mit java etc. mysql usw. nur halt etwas übersehe ich mit dem server..
ich kann mit putty alles machen auch von einem total anderen netzwerk bzw. rechner aber sonst nimmt er keine verbindungen an oder irgendwie so..
-ich weiss nicht mehr weiter.. irgendwelche firewall einstellungen?

irgendwelche ratschläge vielleicht? :no::):no:

Edit: Ich sehe nirgends den Datenbanknamen. Probier mal:
Code:
con = DriverManager.getConnection(driverDB + host + "/" + dbName,user,passwd);
ja habe ich auch schon, nur ok beim posten des codes hatte ich es halt weggetan vorher.. aber so oder so es geht nicht!! und ich glaube uas den oben genannten gründen wahrscheinlich..

man :confused:
ich muss das unbedingt schaffen weil danach gehts mit einem fetten projekt los!
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #14
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
also, mittlerweile habe ich folgendes beobachtet:
-ich habe gestern mit telnet IPdesServers keine verbindung bekommen.
-ich habe auch mit telnet IPdesServers 3306 auch keine verbindung
-auf dem server war "skip-networking" bei der conf-datei von mysql off..
jetzt habe ich sie on gemacht (mysql neugestartet) und mit telnet kommt trotzdem nichts..
-ich habe mit mysql_conf --port den port 3306 bekommen (so sollte es ja auch sein)
-ich habe versucht offene ports oder was auch immer für ports versucht auf dem server rauszulesen und dann alle diese mit telnet gemacht..
nichts von allem geht...
-ich glaube so langsam stimmt alles mit java etc. mysql usw. nur halt etwas übersehe ich mit dem server..
ich kann mit putty alles machen auch von einem total anderen netzwerk bzw. rechner aber sonst nimmt er keine verbindungen an oder irgendwie so..
-ich weiss nicht mehr weiter.. irgendwelche firewall einstellungen?
Wenn Du mit Putty, also wahrscheinlich per SSH, auf den Server kommst, dann mach doch mal direkt auf dem Server ein "telnet localhost 3306". Dann siehst Du, ob MySQL auf Port 3306 lauscht. Evtl. nimmt MySQL nur von localhost Verbindungen an. Das passiert, wenn Du "--bind-address=127.0.0.1" benutzt. Bleibt noch die Firewall. Der Port 3306 sollte auch von außerhalb erreichbar sein.
 
  • JDBC Treiber auf Client UND(?!) Server?? Beitrag #15
rohamis

rohamis

Bekanntes Mitglied
Dabei seit
05.10.2006
Beiträge
121
Reaktionspunkte
0
Ort
DE - NRW
Der Moderator kann gerne dieses Thema löschen.
 
Thema:

JDBC Treiber auf Client UND(?!) Server??

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben