Ich möchte einige SQL-Skripte mit Java Runtime.exec Methode ausführen. Ich beabsichtige, mysql.exe/mysql.sh aufzurufen und die Skriptdatei an diesen Prozess umzuleiten. an der Eingabeaufforderung kann ich den BefehlWie stdin zu Java Runtime.exec umleiten?
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
betreibe ich mysql.exe mit Runtime.exec aufrufen können, aber wie kann ich umleiten Daten aus SQL-Datei mysql.exe?
las ich den Artikel in http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 und verwendet, um den StreamGobbler Mechanismus, um die Fehler und Ausgabeströme zu erhalten. Kein Problem dort. Das Problem tritt beim Lesen der Datei "scripts \ create_tables.sql" mit BufferedReader auf und übergibt den Inhalt an den Ausgangsstrom von process. Ich habe erwartet, dass der Prozess die Daten an die mysql.exe übergibt. Aber ich sehe, dass nur die erste Zeile aus dieser SQL-Datei gelesen wird.
OutputStream outputstream = proc.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
while ((line = br.readLine()) != null)
{
bufferedwriter.write(line);
bufferedwriter.flush();
System.out.println(line);
}
bufferedwriter.flush();
bufferedwriter.close();
proc.waitFor()
Wenn ich dies tun sehe ich, dass nur die erste Zeile in create_tables.sql ausgeführt wird. Der Exit-Code für den Prozess ist 0 und es gibt keinen anderen Fehler oder Ausgabe.
und der Fehlerstrom, natürlich. Oder füge Ausgabe- und Fehler-Streams mit der redirectErrorStream (boolean) -Methode von ProcessBuilder zusammen und lese die zusammengeführten Streams. –