2013-07-06 67 views
0

以下是我的代碼。我不知道爲什麼它不工作。調試完成後,我發現 runtimeProcess返回「java.lang .ProcessImpl @ 1afe17b「和processComplete返回 1.我認爲我無法構建我傳遞給.exec的命令。請幫助我。mysqldump.exe正在通過java調用mysqldump exe時創建空白的mysql數據庫備份文件

public static boolean backupDB(String Database, String Dbuser, String Password) throws IOException, InterruptedException 
{ 
Process runtimeProcess; 
try{ 
runtimeProcess = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C","C:\\Program  Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe -u"+Dbuser+" -p"+Password+Database+"  >F:\\backup.sql"}); 
System.out.println(runtimeProcess); 
int processComplete = runtimeProcess.waitFor(); 
System.out.println(processComplete); 
if (processComplete == 0) { 
System.out.println("Backup created successfully"); 
return true; 
} 
else{ 
System.out.println("Could not create the backup"); 
} 
}catch (Exception ex) 
{ 
ex.printStackTrace(); 
} 
return false; 
+0

爲什麼你使用運行時優先使用ProcessBuilder –

+0

好吧,也會試用ProcessBuilder。感謝您的建議。 –

回答

0

它可能就是,你寫的問題的方式製造品,但這並不看起來是正確的:

"C:\\Program  Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe" 

你有ProgramFiles,那裏有5米之間的空間通常只有1個。這足以防止shell找到可執行文件。


UPDATE

我認爲你需要找出什麼是被寫入stderr。簡單的方法是將其重定向到不同的文件。 (我不確定你在Windows命令語言中用什麼語法來做這件事......)

+0

感謝您的建議。但實際上代碼是runtimeProcess = Runtime.getRuntime()。exec(new String [] {「cmd.exe」,「/ C」,「C:\\ Program Files \\ MySQL \\ MySQL Server 5.5 \\ bin \\ mysqldump.exe -u「+ Dbuser +」-p「+ Password + Database +」> F:\\ backup.sql「});在我的文章中,它顯示更多空間 –

+0

C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin \ mysqldump.exe -uroot -proot1 mysql> F:\ backup.sql [email protected] 無法創建備份//這是我的控制檯輸出與調試前瞻性 MySQL的 根 目錄root1 –

+0

完整的控制檯輸出 F:\ backup.sql C:\ Program Files文件\的MySQL \ MySQL服務器5.5 \ BIN \ mysqldump.exe -uroot -proot1 mysql> F:\ backup.sql [email protected] [email protected] null 假 [email protected] [email protected] -1 [email protected] [0,0,0,0,0,0,0 ,0,0,0,0,0, [email protected] [email protected] [0,0,0,0,0,0,0,0,0,0,0 , [email protected] -1 1 @Stephen C –

0

一個直接的方法是首先在命令行 上試試命令並使用String作爲參數,而不是一個String []數組。

String cmd = "C:\\Program  Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe -u"+Dbuser+" -p"+Password+Database+"  >F:\\backup.sql" 
Runtime.getRuntime().exec(cmd); 

如果做不到這一點,你可以隨時使用以下弄清楚什麼是對 幕後去。

Runtime r = Runtime.getRuntime(); 
r.traceInstructions(true); 
r.traceMethodCalls(true); 
r.exec("your command") 
+0

嗨米林德,感謝您的建議。如果我不使用exec(new String [] {「cmd.exe」,「/ C」,executeCmd});然後java給出了錯誤,說無法找到mysqlsump.exe ... @ Milind –

+0

我嘗試了以下的事情,但他們沒有工作。 –

+0

String executeCmd =「mysqldump.exe -u」+ Dbuser +「-p」+ Password + space + Database +「>」+ path; // runtimeProcess = Runtime.getRuntime().exec(new String [] {「cmd.exe」,「/ C」,「Start」,executeCmd}); \t \t // runtimeProcess = Runtime.getRuntime().exec(「cmd.exe/C executeCmd」); \t \t // runtimeProcess = Runtime.getRuntime().exec(「cmd.exe/C Start executeCmd」); –