[英]error for Importing sql file to mysql database using java in windows
這是我的代碼
try{
String logf = "mysql -p -h localhost ruralcdn<E:\\data\\DBServer\\"+FileName;
System.out.println("Command"+logf);
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(logf);
int lm = pr.waitFor();
System.out.println("lm"+lm);
System.out.println("!!Done!!");
}catch(Exception ex){
System.out.println("!!error!!");
}
當我編譯上面的代碼時,它會掛起無限的時間,並且我的數據庫中沒有更新條目。 當我嘗試使用下面給出的方法時
Connection conn = dbConnectionSource.getConnection();
Statement stmt = conn.createStatement();
stmt.execute(FileUtils.readFileToString(new File("./some-sql-file")));
控制台顯示錯誤:您的SQL syntex中有錯誤
請幫助我,這樣我才能正確地做事。
謝謝
您的命令(在logf
)包括標准輸入的重定向。 不幸的是,你無法這樣做,因為Process.exec(String)
方法不了解如何進行命令重定向,引用和sso。 它只能理解如何使用由空格分隔的參數執行簡單命令。
你有兩個選擇:
您可以使用Java打開該文件,並將其寫入流程對象的輸出流,以便它顯示在命令標准輸入上。
您可以告訴Java在shell /命令解釋器中運行mysql
命令,該命令可以處理重定向等。
您的代碼應如下所示:
String[] command = new String{
"cmd",
"/c",
"mysql -p -h localhost ruralcdn < E:\\data\\DBServer\\" + fileName;
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
p.waitFor();
您的代碼應該做的另一件事是從命令中讀取和顯示(或丟棄)標准輸出/錯誤。 如果你不讀它:
mysql
命令有可能會阻塞,因為它不能再寫入你沒有讀過的管道。 控制台顯示錯誤:您的SQL syntex中有錯誤
這可能是說實話......
順便說一下, mysql
命令當前掛起的原因是它正在等待Java進程在其標准輸入上發送數據。 這不會發生,因為您的Java代碼不會向它寫任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.