MySQL Datenbank aus Programm heraus starten

poschi

Neues Mitglied
Hallo zusammen.

Ich verwende aktuell zu Testzwecken eine MySQL-Datenbank aus dem XAMPP-Paket. Um mit dieser DB zu kommunizieren muss ich (logischerweise) die Datenbank von Hand starten, da ich MySQL als Dienst in vielen Fällen doch sehr ungeschickt finde. Nun möchte ich versuchen, die Datenbank zu Programmstart zu starten und am ende wieder zu schließen, jedoch scheitere ich dabei kläglich.

Ich habe es mittels exec versucht
Java:
Runtime.getRuntime().exec("C:\\Program Files\\xampp\\mysql_start.bat");

Code:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:207)
	at Functions.connect(Functions.java:17)
	at Main.<init>(Main.java:124)
	at Main.main(Main.java:133)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at java.net.Socket.connect(Socket.java:478)
	at java.net.Socket.<init>(Socket.java:375)
	at java.net.Socket.<init>(Socket.java:218)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
	... 17 more
Java Result: 1

Kann mir jemand dabei helfen?

Im Voraus schon einmal Danke!!!
 
Das Problem scheint darin zu liegen, dass die MySQL-Datenbank nicht läuft wenn Du mit dem JDBC Treiber connecten willst.

Einfache Möglichkeiten:

1) Dein Startbefehl funktionierte nicht. Guck mal in die Doku zu .exec(...) und lass Dir den Prozess zurückliefern. Dort den Output und Error-Stream abgreifen und auf der Konsole ausgeben. Beispiele gibt es dazu im Netz genügend.

2) Die Datenbank wird gestartet, ist aber noch nicht "online" wenn Du über den JDBC-Treiber eine Connection anforderst. Da einfach erstmal gepflegt 15sek warten und schauen ob dann alles OK ist (die Wartezeit hängt von Version, CPU, RAM, Wetter und dem Aztekischen Kalender ab - also vielleicht alle 5sek versuchen zu connecten, die Fehlermeldung interpretieren und dann entsprechend handeln).

3) Wie tfa es etwas derbe ausgedrückt hat wäre vielleicht eine andere Datenbank für Deine Aufgabe sinnvoller. Denn im Normalbetrieb wird beim Start des OS auch die Datenbank hochgezogen und die Applikation hängt sich dann drauf. Wenn das umgekehrt ist (App startet DB) würde ich auch was anderes nehmen. Alleine schon von der Administration heraus (so gefühlsmässig).

Bernd
 
@tfa: habe deinen Hinweis gleich umgesetzt und mich mit h2 beschäftigt. Und siehe da, bisher einwandfrei.

@Bernd: auch deinem Hinweis bin ich nachgegangen. Beim Aufruf der mysql_start.bat wird versucht, die Datei ./mysql/bin/my.ini mit zu laden. Da der Aufruf jedoch nicht standardmäßig aus "C:\Program Files\xampp\" stattfindet, sondern aus z.b. "C:\Users\benutzer\Documents\" findet er diese Datei nicht und es wird keine Datenbankverbindung erstellt.

Da mich tfa's Lösung mit der embedded Datenbank schon viel weiter gebracht hat, werde ich wohl diesen Weg weiter verfolgen. Vielen Dank für eure Unterstützung.

Gruß poschi
 

Zurück
Oben