Voglio eseguire alcuni script SQL utilizzando il metodo Runtime.exec di Java. Intendo invocare mysql.exe/mysql.sh e reindirizzare il file di script a questo processo. Dal prompt dei comandi posso eseguire il comandocome reindirizzare lo stdin in java Runtime.exec?
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
posso invocare mysql.exe utilizzando Runtime.exec ma come faccio a reindirizzare i dati da file sql per mysql.exe?
ho letto l'articolo in http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 e utilizzato il meccanismo StreamGobbler per ottenere i flussi di errore e di uscita. Nessun problema lì. Il problema arriva leggendo il file "scripts \ create_tables.sql" usando BufferedReader e passando il contenuto all'output di prcess. Mi aspettavo che il processo passasse i dati a mysql.exe. Ma vedo che solo la prima riga viene letta da questo file sql.
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()
Quando faccio questo vedo che viene eseguita solo la prima riga in create_tables.sql. Il codice di uscita per il processo è 0 e non vi sono altri errori o output.
E il flusso di errore, naturalmente. Oppure unisci output e flussi di errore con il metodo redirectErrorStream (booleano) di ProcessBuilder e leggi i flussi uniti. –