簡體   English   中英

在Windows中使用java將sql文件導入mysql數據庫時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM