2012-05-24 10 views
1

好的,我的Java應用程序無法使用windows運行時環境執行mysqldump備份。我有捕獲異常的打印輸出代碼,並且我沒有看到拋出異常,在執行備份代碼時表面看起來很好。從Win7問題上的Java代碼獲取MySQL mysqldump

我也在命令行控制檯中測試了mysqldump命令;它在那裏沒有問題。

代碼:

Runtime rt = Runtime.getRuntime(); 
try { 
    Process pr = rt.exec("mysqldump -u test --password=pass lager > newBackup.sql"); 

} catch (IOException ex) { 
    System.out.println("IO error Runtime. "+ex.getMessage()); 
} 

有誰知道爲什麼它不會傾倒/備份數據庫?有一些我需要添加的權限或者某些東西(運行Windows 7)。

+0

要打印'ex.getMessage() '但你不是在告訴我們它說什麼? –

+0

這就是事情,它不會拋出任何異常。它用於當我得到命令錯誤,或沒有mysqldump作爲PATH變量。沒有文件正在輸出,我不知道爲什麼,因爲沒有任何反饋。 – gorn

回答

0

可能你可以看看這篇文章關於beetwen exec和命令行(http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html)的區別。

在我身邊,我試試這個代碼,以捕獲的mysqldump的輸出--help與類StreamGoggle命令來查找到距離和javaworld的文章:

public Main() { 
    try { 
     FileOutputStream fos = new FileOutputStream("c:/tmp/test.txt"); 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec("mysqldump --help"); 
     // any error message? 
     StreamGobbler errorGobbler = new StreamGobbler(
       proc.getErrorStream(), "ERROR"); 

     StreamGobbler outputGobbler = new StreamGobbler(
       proc.getInputStream(), "OUTPUT", fos); 

     errorGobbler.start(); 
     outputGobbler.start(); 

     int exitVal = proc.waitFor(); 
     System.out.println("ExitValue: " + exitVal); 
     fos.flush(); 
     fos.close(); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
}