# MySQL Zugriffe (es geht, aber warum?)



## Halunken-Joe (26. Dez 2006)

Hallo alle zusammen,

Ich bin noch nicht so fit in Java und habe gerade zum ersten Mal erfolgreich auf eine MySQL Datenbank zugegriffen und habe noch (weiter unten) ein paar Fragen dazu:

Ich entwickle unter Windows 2000 mit Eclipse 3.2.1
Das JRE jre1.5.0_06 ist unter C:\Programme\Java\jre1.5.0_06 installiert
Zum testen benütze ich mein internes Netz: 192.168.100.x
Das MySQL 5.0_22 (Debian) läuft unter Linux
Das von mir geschriebene Programm wird aus Eclipse heraus gestartet

Zuerst dachte ich, das ich den Datenbanktreiber unter ->Start->Einstellungen->Systemsteuerung->Verwaltung->Datenquellen etwas einrichten müßte. Früher (mit Access) war das so, aber dort war nichts zu holen.

Nach dem lesen der FAQ hier im Forum habe ich mir von http://dev.mysql.com/downloads/connector/ den Connector/J 5.0 heruntergeladen: mysql-connector-java-5.0.4-bin.jar  Die 5er-Versionen sollen zwar hin- und wieder Probleme bereiten aber eine 3er-Version wollte ich irgendwie nicht.

Mir war zuerst nicht ganz klar wohin er installiert werden sollte: Auf die Maschine mit dem Eclipse oder auf die Maschine mit dem MySQL Server?  Irgendwann war den klar das der J/Connector auf der Maschine, auf der ich mit Eclpse entwickle, installiert werden muß. 

Als ich über ->Arbeitsplatz->Eigenschaften->Erweitert->Umgebungsvariablen versucht habe den Pfad (unter dem ich  den J/Connector mysql-connector-java-5.0.4-bin.jar abgelegt hatte)  zur 'PATH' Variable hinzuzufügen bin ich gescheitert. Der neue Pfad steht zwar drin, zeigt aber keine Wirkung. Ehrlicherweise muß ich sagen das ich Windows auch nicht neu gestartet hatte. Die Fehlermeldungen lauteten folgendermassen:


```
java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
	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)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at SQL_Test.main(SQL_Test.java:25)
Treiber kann nicht geladen werden: org.gjt.mm.mysql.Driver
```

Letzt endlich habe ich den J/Connector mysql-connector-java-5.0.4-bin.jar im Ordner meiner JRE Installation abgelegt und zwar unter C:\Programme\Java\jre1.5.0_06\lib\ext\mysql-connector-java-5.0.4-bin.jar  Das führte zum Erfolg. Unter Linux soll das mit dem \lib\ext\ Verzeichnis ebenfalls funktionieren).

Mein Code sieht dann folgermassen aus: 


```
try{
			//Class.forName("com.mysql.jdbc.Driver");
			Class.forName("org.gjt.mm.mysql.Driver");
			//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			//Class.forName("mysql-connector-java-5.0.4-bin.jar");
			}
		catch(ClassNotFoundException cnfe){
			    cnfe.printStackTrace();
			    System.out.println("Treiber kann nicht geladen werden: "+cnfe.getMessage());
			}
```

und ...


```
Connection conn;
                conn = DriverManager.getConnection("jdbc:mysql://192.168.100.3/test_db?user=derpapast&password=geheim");
```


Jetzt meine Fragen: 

1) In den meisten Beispielen steht, das man import java.sql.* und import java.net.* benützen soll. Auf import java.net.* kann man aber anscheinend komplett verzichten. Warum eigentlich? Es handelt sich doch um eine  Netzwerkverbindung.

2) Warum funktioniert ausgerechnet "Class.forName("org.gjt.mm.mysql.Driver");"? Die anderen Aufrufe habe ich in  verschiedensten Beispielen gefunden,aber sie funktionieren nicht.

3) Ich habe es noch nie gemacht, aber wenn ich ein *.jar File mit meinem Code erzeuge und es einem Bekannten in die Hand drücke (und vorher das 192.168.100.3 in www.meinrechner.de ändere und den  port 3306 freigegebe) : Muß der auch den J/Connector bei sich installieren? Oder schubbert das Eclipse den ganzen wichtigen JDBC Kram mit in das *.jar? Wird das *.jar dann nicht wahnwitzig groß?


Um zum Schluß: Vielen Dank an alle, die Beiträge hier im Forum oder anderswo schreiben: Ohne dieses Forum und ohne Google könnte ich immer noch nicht auf die Datenbank per Java zugreifen!


----------



## Caffè Latte (26. Dez 2006)

Hi,

zu 1: fast alles, was du für eine DB-Anbindung brauchst, ist im Package java.sql. java.net braucht man, wenn ich mich nicht täusche, wenn man lokal über den Socket auf das MySQL-System zugreifen will. Allerdings ist meine IDE immer so freundlich mir zu sagen, was ich brauche. 

zu 2: ist das nicht ein alter Treiber? Bei mir heißt der jedenfalls "com.mysql.jdbc.Driver". Genaueres steht im README des Connectors. Wenn das nicht so klappt wie beschrieben dann wird der Treiber nicht gefunden. 

zu 3: ob deine DB von außen erreichbar ist, ist eine andere Frage. Auf jeden Fall braucht jeder, der über Java darauf zugreifen will, den JConnector. Deshalb wäre es sinnvoll, dass du den in deine "Projekt" verpackst und gleich mit weiter gibst.

Hoffe es hilft ...


----------



## Halunken-Joe (26. Dez 2006)

Caffè Latte hat gesagt.:
			
		

> zu 2: ist das nicht ein alter Treiber? Bei mir heißt der jedenfalls "com.mysql.jdbc.Driver". Genaueres steht im README des Connectors.


In http://dev.mysql.com/doc/refman/5.1/de/connector-j-reference-configuration-properties.html habe ich folgendes gefunden: "... Die Klasse, die java.sql.Driver in MySQL Connector/J implementiert, heißt com.mysql.jdbc.Driver. Der Klassenname org.gjt.mm.mysql.Driver  eignet sich auch, um die Abwärtskompatibilität mit MM.MySQL zu bewahren. ..."

Mit anderen Worten: Es gehen beide (ich habe es auch gerade ausprobiert) Treiber, wobei "com.mysql.jdbc.Driver" der neuere Treiber ist.


----------



## Guest (2. Mrz 2007)

---


----------



## DP (3. Mrz 2007)

Anonymous hat gesagt.:
			
		

> ---



wie meinen?!


----------

