我想用Java的Runtime.exec方法執行一些sql腳本。我打算調用mysql.exe/mysql.sh並將腳本文件重定向到此進程。 從命令提示符下,我可以運行命令如何將stdin重定向到java Runtime.exec?
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
我可以使用的Runtime.exec調用的mysql.exe但我怎麼重定向從SQL文件數據的mysql.exe?
我http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4閱讀文章和所使用的StreamGobbler機制獲得錯誤和輸出流。那裏沒問題。問題出現在使用BufferedReader讀取文件「scripts \ create_tables.sql」並將內容傳遞給prcess的輸出流。我期待過程將數據傳遞給mysql.exe。但是我發現只有第一行是從這個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()
當我這樣做時,我發現只有create_tables.sql中的第一行被執行。該進程的退出代碼爲0,並且沒有其他錯誤或輸出。
錯誤流這個方法當然而且,。或者將輸出和錯誤流與ProcessBuilder的redirectErrorStream(boolean)方法合併,並讀取合併的流。 – 2010-04-05 16:35:15