Eclipse Probleme mit MySQL Connector

nonickatall

Mitglied
Hallo ich bin neu bei Java und in diesem Forum und mache meine ersten Schritte. Ich bin auch schon vorwärts gekommen, habe nun aber ein Problem, wo ich einfach nicht weiterkomme.

Ich habe ein Projekt in Eclipse gestartet und versuche auf eine MySQL Datenbank zuzugreifen. Aus Eclipse heraus funktioniert das auch einwandfrei und ich kann auch Datensätze auslesen. Wenn ich meine Main Klasse auf der Kommandozeile von Windows starte, funktioniert diese auch, (Also die Java Installation und Konfiguration scheint zu stimmen) allerdings bekomme ich eine Fehlermeldung, die mir sagt “No suitable Driver found for MySQL.“

Ich habe mir den entsprechenden mysql-connector-java-8.0.23.jar runtergeladen, habe diesen als Library in Eclipse eingebunden. Deswegen funktioniert es ja auch, in Eclipse.

Aber woher weiß Java, wenn ich das Programm auf der Kommandozeile in Windows ausführe, woher der Connector kommt?

Es gibt ja den bei Windows eingestellten Classpath. Wenn ich den Connector da rein kopiere, funktioniert es aber auch nicht.

Und auch auf einer Linux Maschine, wo das Programm später mal laufen soll, existiert dasselbe Problem.

Hat jemand eine Idee was ich falsch mache?

Vielen Dank im Voraus

Ralf
 
Moin.
ich hab mir dafür eine BATCH-Datei geschrieben.
Die muss du halt entsprechend deiner Pfade und Dateinamen anpassen.
Ich hoffe ich habe dein Problem richtig interpretiert.

[CODE lang="rich" title="start.bat"]set PATH_TO_SQLITE="C:\Program Files (x86)\Java\java-sqlite-3.27.2.1"
java -jar --module-path %PATH_TO_SQLITE% --add-modules java.sql
exit[/CODE]
 
sorry. beim Copieren ist die main. jar verloren gegangen.
Rich (BB-Code):
set PATH_TO_SQLITE="C:\Program Files (x86)\Java\java-sqlite-3.27.2.1"
java -jar --module-path %PATH_TO_SQLITE% --add-modules java.sql main.jar
exit
 
Es gibt verschiedene Ansätze. Es reicht nicht, ein .jar-File einfach in ein Verzeichnis zu kopieren, das vom Classpath erfasst wird. Das .jar-File selbst muss Teil des Classpaths sein. Das erreichst Du z. B. mit dem Schalter -cp <jarfile1>;<jarfile2>;....

Nehmen wir mal an, Du hast eine Hauptklasse app.Main, die sich in einem JAR /pfad/zu/app.jar befindet, dann kannst Du
Code:
java -cp /pfad/zu/mysql-connector-java-8.0.23.jar:/pfad/zu/app.jar app.Main
aufrufen.

Alternativ hat app.jar ein Manifest mit einem Classpath. Dann kann man, wenn alles in Ordnung ist, die jar per
Code:
java -jar /pfad/zu/app.jar
oder unter Windows per Doppelklick starten.

Sobald Du das Module-System verwendest, sieht die Sache wieder etwas anders aus (s. Batch-File von @missy72).
 
Zuletzt bearbeitet:
Hallo und vielen Dank für deine Antwort.

Ich verstehe es leider nicht so ganz.

Der Speicherort (in meinem Fall) die mysql-connector-java-8.0.23.jar soll im Classpath stehen. Also kann ich doch diese Datei einfach in den /lib Ordner von meiner Jawa Installation kopieren. Funktioniert aber nicht. Oder ich setze einen weiteren Classpath in Windows. Da steht jetzt bei mir:
.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;S:\Software\Raspberry\MyHome\bin

Funktioniert aber auch nicht.
 
Grad mal gegoogelt (https://stackoverflow.com/a/4434385): wenn Du Deine Anwendung unter Eclipse zum Laufen bekommst, dann ruf mal in Eclipse unter File -> Export -> Java -> Runnable JAR File -> "Copy required libraries into subfolder next to the generated JAR" auf.

Dabei sollte Eclipse Dir ein jar-File mit Deiner Anwendung und daneben einen Ordner mit dem JDBC-Treiber erstellen. Danach solltest Du die Datei per Doppelklick ausführen können. Wenn Du die Anwendung woanders hinkopieren willst, musst Du den Ordner mitkopieren.
 
Jetzt bin ich vollends verwirrt..

Also muss im Classpath S:\Software\Raspberry\MyHome\bin\mysql-connector-java-8.0.23.jar stehen?

Ich verstehe die Batch von Missy und den jawa -cp Befehle von mihe7 nicht, denn ich habe eine Klasse (MyHome.class) in einem Package, die ich mit "java myhome.MyHome" aus dem Verzeichnis /bin starte.

Ich habe keine verschiedenen jar wie main.jar

Oder habe ich das grundsätzlich nicht verstanden?

Wenn ich eine Applikation mit mehreren Klassen haben, dann stehen doch diese Klassen alle als Dateinen in einem Verzeichnis und ich starte die entsprechende Klasse mit der Main Methode? Und der Classpath verweist auf die Java Installation bzw. dessen Lib Verzeichnis selbst.

Oder, habe ich da einen grundsätzlichen Denkfehler?
 
lso muss im Classpath S:\Software\Raspberry\MyHome\bin\mysql-connector-java-8.0.23.jar stehen?
Ja.

Ich verstehe die Batch von Missy und den jawa -cp Befehle von mihe7 nicht, denn ich habe eine Klasse (MyHome.class) in einem Package, die ich mit "java myhome.MyHome" aus dem Verzeichnis /bin starte.
Dann
Code:
java -cp S:\Software\Raspberry\MyHome\bin\mysql-connector-java-8.0.23.jar;. myhome.MyHome
aus dem bin-Verzeichnis heraus.

Oder, habe ich da einen grundsätzlichen Denkfehler?
Ja. Der Classpath gibt die Orte an, an denen die Java Virtual Maschine nach Klassen suchen soll. Zum Beispiel habe ich oben als zweiten Bestandteil des Classpath mit dem Punkt das aktuelle Verzeichnis angegeben. Damit sucht Java die Klasse myhome.MyHome auch unter .\myhome\MyHome.class.
 
Top!!! Das mit dem Export einer jar Datei hat funktioniert... 🙂

Das werde ich mir morgen dann noch genauer anschauen. Aber ich bin mal einen wichtigen Schritt weiter. Daran hing ich jetzt seit Stunden..

Vielen Dank erstmal an Alle...
 
Ein Jar ist übrigens nur ein ZIP mit speziellem Aufbau. Darin solltest Du eine Datei MANIFEST.MF finden. Das ist eine Textdatei, in der dürftest Du dann einen Main-Class-Eintrag und einen Class-Path-Eintrag finden. Das entspricht dann dem, was wir vorhin über die Kommandozeile aufgerufen haben 🙂
 

Zurück
Oben