# Externes Programm in JAR einbinden



## Hannes23 (8. Feb 2010)

Hallo zusammen,

ich würde gerne die Datei mysqldump.exe als externes Programm in ein JAR einbinden (unter Eclipse), um sie dann per exec benutzen zu können. Ich habe zwar hier im Forum einen Beitrag dazu gefunden, der hat mir aber leider nicht weitergeholfen.

Kann mir ansonsten jemand sagen, wie man das machen kann?

Vielen Dank für jede Hilfe,

Hannes


----------



## Tomate_Salat (8. Feb 2010)

zeig mal her was du bisher hast


----------



## Hannes23 (9. Feb 2010)

Bisher habe ich noch nichts, weil ich ja wie gesagt nicht weiß, wie man das ext. Programm einbindet und über welchen Pfad man dann darauf zugreift. Ich habe lediglich ein Programm, das auf diese Weise


```
String cmd = "mysqldump --default-character-set=utf8 --host=" + server + " --port=3306 --user="
+ user + " --password=" + password + " --database " + database + " --result-file=" + file;
shell.exec(cmd);
```

auf mysqldump zugreift.

Oder bezieht sich Deine Frage darauf, was ich bisher im Forum gefunden habe? Ich habe nur diesen 1-Jahr-alten Beitrag gefunden. Der Lösungsvorschlag funktioniert aber nicht und ich hätte mir außerdem erhofft, eine "einfachere" Lösung zu finden: http://www.java-forum.org/deployment/79329-executable-jar-einbinden.html

Viele Grüße, Hannes


----------



## Gast2 (9. Feb 2010)

Schau dir mal  cmdarray, String[] envp, File dir) an.

Es ist besser die Arguemente als String[] zu übergeben - ein langer zusammengestzer String geht aber auch.


----------



## Hannes23 (9. Feb 2010)

Hallo fassy,

vielen Dank für den Hinweis, das werd ich mir gleich mal anschauen. hast Du vielleicht auch einen Tip für mich, wie ich das mit der Einbindung der mysqlump.exe in eine JAR (+ Aufruf) regeln kann?


----------



## Tomate_Salat (9. Feb 2010)

Ein Beispiel anhand einer Jar-Datei

```
try
{                     
        Runtime.getRuntime().exec("java -jar myDatei.jar debug", null, new File("C:\\Dokumente und Einstellungen\\xxxxx\\Eigene Dateien\\NetBeansProjects\\MyDatei\\dist\\"));

}
catch(Exception e)
{
       e.printStackTrace();
}
```

bei dir könnte es (ungetestet) so funktionieren (anhand von deiner [c]String cmd[/c])

```
Runtime.getRuntime().exec(cmd, null, new File(...));
```

aber generell stellt sich hier dann doch die Frage: wozu diese Datei einbinden? Das sieht mir aus, als ob du über diese einen Datenbankzugriff tätigen willst. Ich würde dafür eher die MySQL-Funktionen von JAVA oder ein externes PHP-Script nutzen, dass ich über das Programm anspreche. Ist denke ich beides einfacher/eleganter als ein externes Programm für soetwas zu benutzen.


----------



## Hannes23 (9. Feb 2010)

Hallo Tomate_Salat,

vielen Dank für Deine Antwort!



Tomate_Salat hat gesagt.:


> Ein Beispiel anhand einer Jar-Datei
> aber generell stellt sich hier dann doch die Frage: wozu diese Datei einbinden? Das sieht mir aus, als ob du über diese einen Datenbankzugriff tätigen willst. Ich würde dafür eher die MySQL-Funktionen von JAVA oder ein externes PHP-Script nutzen, dass ich über das Programm anspreche. Ist denke ich beides einfacher/eleganter als ein externes Programm für soetwas zu benutzen.



Ja, der Web über JDBC wäre sicher der sauberere. Aber ich wüsste garnicht, wie ich das machen könnte :-( Ich dachte mir, dass der Weg über mysqldump der einfachere ist, weil ich das Backup einfach über die eine Kommandozeile "mysqldump ..." bekomme. Das sicht damit aber ebenfalls Schwierigkeiten ergeben, hätte ich nicht gedacht


----------



## moormaster (9. Feb 2010)

Du kannst die mysqldump.exe zwar in die jar mit reinpacken lassen aber bevor du sie aufrufen kannst, muss sie auf jeden Fall erst irgendwo im Dateisystem wieder ausgepackt werden. Man kann sie nicht direkt aus der jar Datei heraus starten.


----------



## Tomate_Salat (9. Feb 2010)

Hier musst du dir klar werden: MySQL ist standarmäßig so konfiguriert, dass sie keine externe Zugriffe zulässt => also ist sie erstmal nur unter 127.0.0.1(localhost) erreichbar. Liegt deine MySQL auf einem entfernten Server, empfehle ich dir ein PHP-Script als "Server". Willst du die MySQL in Java benutzen, empfehle ich dir Java ist auch eine Insel  mal anzuschauen. Auf den ersten Blick, dürfte dass das Kapitel sein, welches dich wohl Interessieren dürfte. 

Willst du per ODBC darauf zugreifen, brauchst du zunächst den MySQL-ODBC-Treiber. 

In diesem Zusammenhang empfehle ich dir auch das Tutorial von Landei

Mit freundlichen Grüßen

Tomate_Salat


----------



## Hannes23 (9. Feb 2010)

Hallo,

vielen Dank nochmal für euere Antworten und Links!

Verbindungen zu MySQL habe ich über JDBC schon hergestellt und mir ist auch klar, wie man dafürber SQL-Statements verschickt. Darüber hinaus weiß ich aber nicht recht, wie ein Backup funktionieren soll (Die INSERTS sind klar, aber wie mache ich das CREATE, sprich wie komme ich an die Tabellennamen und die Struktur). Aber da ich diese Problematik in diesem Beitrag: http://www.java-forum.org/datenbank...mysql-dumpdatei-ohne-batchdatei-einlesen.html schon angesprochen habe, würde ich sie hier fast lieber nicht mehr ausbreiten (um den Topic gerecht zu werden), sondern die Diskussion lieber in den anderen Beitrag verschieben.

Was das Thema "externe Datei einbinden" angeht, belasse ich es wohl aufgrund euerer Antworten einfach dabei, dass es sehr schwierig/ungünstig ist und in meinem Fall (mysqldump) der Weg über JDBC der bessere wäre...

Viele Grüße, Hannes


----------



## Tomate_Salat (9. Feb 2010)

Belasse es bei ungünstig/umständlich/Ressourcenfressend. Wenn du für jeden Query ein externes Programm startest oder zur hilfe rufst, verschwendest du nur unnötig Ressourcen. Schau dir lieber die gängigen Methoden an und wennde dich bei fragen ans Forum. 

Wenn damit alles geklärt wäre, markiere das Thema bitte als Erledigt

MFG

Tomate_Salat


----------



## moormaster (9. Feb 2010)

Ich meine das müsste man mit dem SHOW-Befehl abfragen können:
MySQL :: MySQL 5.0 Reference Manual :: 12.5.5 SHOW Syntax


----------

