# Java und MySql... "No suitable Driver..."



## yeti (16. Okt 2009)

Hallo,

ich beschäftige mich neu mit dem Thema eine MySql DB in Java abzufragen.
Habe einen Beispielcode für meine ersten Tests gefunden und versuche mich daran. Das was ich bisher im Netz gelesen habe ist nun mein bisheriges Ergebnis.

Ich arbeite hier mit Win2K und XAMPP. Die DB Studentprofiles ist vorhanden und enthält eine Tabelle mit Daten. Mit Openoffice konnte ich eine Verbindung zu dieser DB herstellen.

Beipielcode:

```
import java.sql.*;

public class mysql1 {
  public static void main(String args[]) {
    treiber_laden();
    daten_ausgeben();
  }

  public static void treiber_laden() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
    }
    catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }

  public static void daten_ausgeben() {
    try {
      Connection con = DriverManager.getConnection(
         "jdbc:mysql://localhost/studentprofiles","root","");
      Statement stmt = con.createStatement();
      ResultSet rslt = stmt.executeQuery("select * from weblinks");
      while (rslt.next()) {
	 System.out.println(rslt.getInt(1) + "\t" + rslt.getString(2) +
            "\t" + rslt.getString(3) + "\t" + rslt.getDate(5));
      }
      stmt.close();
      con.close();
    }
    catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
}
```

Ich habe diesen Treiber runtergeladen:
mysql-connector-java-5.1.10-bin.jar

In dieses Verzeichnis kopiert:
c:\programme\java\jdk1.6.0_10\jre\lib\ext

Habe ebenso eine neue Umgebungsvariable "CLASSPATH" mit folgendem Inhalt erzeugt:
c:\programme\java\jdk1.6.0_10\bin;c:\programme\java\jdk1.6.0_10\jre\lib\ext;F:\java\mysql

Ich starte das ganze in der Eingabeaufforderung und bekommen folgende Fehlermeldung:
com.mysql.jdbc.Driver
No suitable driver found for jdbc:mysql://localhost/studentprofiles

Irgendetwas fehlt mir noch und ich komme nicht drauf, was das sein könnte.
Könnt ihr mir einen Tipp geben?

Vielen Dank im voraus und viele Grüße
Yeti


----------



## L-ectron-X (16. Okt 2009)

yeti hat gesagt.:


> In dieses Verzeichnis kopiert:
> c:\programme\java\jdk1.6.0_10\jre\lib\ext


Das sollte man niemals machen. Entweder den Treiber auspacken und dann mit zu den eigenen Klassen legen, oder meiner Meinung nach viel besser: Den Treiber nebem die eigene Jar-Datei legen/ausliefern und im Manifest im Class-Path aufführen.

Kannst auch mal einen Blick in die FAQ werfen: http://www.java-forum.org/datenbanken/4322-no-suitable-driver-exception-mysql.html


----------



## yeti (16. Okt 2009)

L-ectron-X hat gesagt.:


> Das sollte man niemals machen. Entweder den Treiber auspacken und dann mit zu den eigenen Klassen legen, oder meiner Meinung nach viel besser: Den Treiber nebem die eigene Jar-Datei legen/ausliefern und im Manifest im Class-Path aufführen.



Das verstehe ich nicht. Manifest?
Zu 1.
Wenn ich die jar-Datei entpacke und den Inhalt mit in mein Projektverzeichnis F:\java\mysql kopiere... meinst du das?

Zu 2.
jar-Datei nicht auspacken und wohing kopieren? Was meinst du mit Manifest? Ich trage den Classpath über die Eigenschaften des Arbeitsplatzes direkt in die Umgebungsvariablen ein.



L-ectron-X hat gesagt.:


> Kannst auch mal einen Blick in die FAQ werfen: http://www.java-forum.org/java-faq-beitraege/4322-no-suitable-driver-exception-mysql.html



Hab ich schon gemacht und daraufhin auch meine bisherige Codezeile:
...  
	
	
	
	





```
"jdbc:mysql://localhost:3306/studentprofiles","root","");
```

Durch diese ersetzt:
...  
	
	
	
	





```
"jdbc:mysql://localhost/studentprofiles","root","");
```

Ich rufe das ganze an der Eingabeaufforderung mit "java mysql1" auf.

Viele GRüße
Yeti


----------



## yeti (16. Okt 2009)

Hi,

nach dem Tipp von L-ectron-X hab ich mal in meinem Javaverzeichnis nach einer Datei mit dem Namen Manifest gesucht. Gefunden habe ich 6 Dateien.

2 heißen chrome.maifest
In den Odnern: 
C:\Programme\Java\jdk1.6.0_10\jre\lib\deploy\jqs\ff
C:\Programme\Java\jre6\lib\deploy\jqs\ff

4 heißen manifest.mf
In den Ordnern:
C:\Programme\Java\jdk1.6.0_10\sample\jmx\jmx-scandir
C:\Programme\Java\jdk1.6.0_10\sample\scripting\scriptpad\src\META-INF
C:\Programme\Java\jdk1.6.0_10\sample\webservices\EbayClient
C:\Programme\Java\jdk1.6.0_10\sample\webservices\EbayServer

Wo trage ich da nun was ein?

Viele Grüße
Yeti


----------



## yeti (16. Okt 2009)

L-ectron-X hat gesagt.:


> Das sollte man niemals machen. Entweder den Treiber auspacken und dann mit zu den eigenen Klassen legen, oder meiner Meinung nach viel besser: Den Treiber nebem die eigene Jar-Datei legen/ausliefern und im Manifest im Class-Path aufführen.



Jetzt hab ich das nochmal gelesen, was du schreibst.
Ich hab gar keine jar-Datei. 

Ich habe die Datei mysql1.class aus der mysql1.java kompiliert. Ich fürchte, wir sprechen von was anderem? Sorry aber ich fange erst an und alles was ich bis jetzt gemacht habe ist class-Dateien aus java-Dateien zu kompilieren und diese dann an der Eingabeaufforderung zu starten.

Kann mir dennoch geholfen werden? ;-)

Gruß Yeti


----------



## L-ectron-X (17. Okt 2009)

Dann gehört der Treiber erstmal mit in den Classpath.

Versuche mal folgenden Aufruf inder Konsole: 
	
	
	
	





```
java -cp .;mysql-connector-java-5.1.10-bin.jar mysql1
```


----------



## yeti (17. Okt 2009)

L-ectron-X hat gesagt.:


> Dann gehört der Treiber erstmal mit in den Classpath.
> 
> Versuche mal folgenden Aufruf inder Konsole:
> 
> ...



Ja, hab ich gemacht.
Jetzt kommt wieder die hier:

com.mysql.jdbc.Driver
No suitable driver found for jdbc:mysql://localhost/studentprofiles

Ich dreh mich hier im Kreis :-( Hoffentlich ist der Aufschlag nicht so hart 
Hast du noch ne Idee?

Gruß Yeti


----------



## yeti (17. Okt 2009)

Hi,

jetzt hab ich grad noch was gefunden. 
MySQL :: MySQL 5.1 Referenzhandbuch :: 25.3.5.3 Häufige Probleme und Lösungen

Da steht dies hier als mögliche Ursache für meinen Fehler:
Der Verbindungs URL hat ein falsches Format oder Sie referenzieren den verkehrten JDBC-Treiber. 

Könnt ihr mir sagen, wie ich rausbekomme, ob ich einen falschen Treiber benutze?
Vielleicht liegt da ja der Hund begraben?

Gruß Yeti


----------



## L-ectron-X (17. Okt 2009)

Mit deinem Code und meiner Zeile zum Starten deines Programms habe ich eine Testverbindung zu einer Datenbank mit dem Treiber _mysql-connector-java-5.1.7-bin.jar_ herstellen können.

Unter welchem Betriebssystem arbeitest du? Falls du Linux verwendest, müsstest du das Semikolon gegen einen Doppelpunkt tauschen.

Versuche ansonsten mal einen älteren Treiber.


----------



## yeti (17. Okt 2009)

Hi,

ist hier bei mir Win2K und XAMPP und an einem Übungsplatz WindowsXP Home auch mit XAMPP.
Habe an beiden Rechnern mit jeweils unterschiedlichen Treibern den glechen Fehler. Liegt es daran, dass ich kein Passwort für die Mysql DB vergeben habe? 

Aber das müsste ja durch die Übergabe von "root" und "" erledigt sein?

Vielleicht ist XAMPP das Problem? Obwohl ich an beiden Rechnern mit OpenOffice und eben diesem JDBC Treiber eine Verbindung herstellen kann und zumindest die Daten aus der Tabelle in der DB lesen kann...

Mir ist das ein Rätsel.

Gruß Yeti


----------



## L-ectron-X (18. Okt 2009)

Hmm, ein' hab' ich noch... 

Setze mal statt _localhost_ die lokale IP-Adresse ein.
Also bspw. 192.168.0.1
Schau dazu mal nach, welche IP dein Rechner hat.


----------



## yeti (19. Okt 2009)

L-ectron-X hat gesagt.:


> Hmm, ein' hab' ich noch...
> 
> Setze mal statt _localhost_ die lokale IP-Adresse ein.
> Also bspw. 192.168.0.1
> Schau dazu mal nach, welche IP dein Rechner hat.



Schade... auch hier der gleiche Fehler.

Ich denke mal es ist irgendwas total dämliches, einfaches.... Vielleicht hilft es, wenn du mir die einzelnen Schritte kurz skizzierst, wie du es machen würdest?

Wäre super....


----------



## Tharsonius (21. Okt 2009)

Ich weiss nicht obs daran liegt, ich verwende in meinem Programm einen anderen Aufruf:

Class.forName("org.gjt.mm.mysql.Driver");


----------



## L-ectron-X (22. Okt 2009)

Schon möglich. Wie gesagt, der Code aus dem Eingangspost ist funktionsfähig.


----------



## yeti (23. Okt 2009)

L-ectron-X hat gesagt.:


> Schon möglich. Wie gesagt, der Code aus dem Eingangspost ist funktionsfähig.



Ja und was mich eben wundert, ich kann mit OpenOffice unter Angabe des ebtsprechenden Connectors auf die MySql DB zugreifen und damit beispielsweise einen Serienbrief erstellen. Das geht alles...
Ich finde leider keine zusammenfassende Doku zu dem Thema.

In den Dokus steht immer nur das, was ich schon gemacht habe. Kopieren sie den Connector da und da hin, setzen sie den CLASSPATH, etc. Es ist echt merkwürdig. 

Kannst du mir evtl. deine Vorgehensweise kurz beschreiben?
Voerausgesetzt du hast einen Windows-Rechner und verwendest auch XAMPP.

Viele Grüße
Yeti


----------



## yeti (23. Okt 2009)

Tharsonius hat gesagt.:


> Ich weiss nicht obs daran liegt, ich verwende in meinem Programm einen anderen Aufruf:
> 
> Class.forName("org.gjt.mm.mysql.Driver");



Hab ich probiert, der gleiche Fehler.

Klappt das bei dir mit Windows und XAMPP? Wenn ja würde ich mich freuen, wenn du mir mitteuilen könntest, welchen Connector, due wo hin kopiert hast, wie dein Classpath diesbezüglich aussieht. Vielleicht habe ich irgendwas an irgendeiner Stelle vergessen / übersehen ?

Gruß Yeti


----------



## yeti (23. Okt 2009)

Es läuft jetzt. War tatsächlicu doch der falsche Classpath eingetragen.
Hab jetzt nach langem rumsuchen und probieren einfach den ganzen Classpath noch mal komplett eingetragen und siehe da... es geht jetzt! 

Vielen Dank für erure Hilfe. Ist mir schon fast peinlich. Wie im Supermarkt... du stehst direkt vorm Ketchup und fragst die Verkäuferin nach dem Ketchup, die dich dann nur angrinst... Naja ;-)

Viele Grüße
Yeti


----------

