2010-02-19 227 views
0

如何在mysql中不存在數據庫名稱時查找錯誤。數據庫名稱,如演示。我提供這個下面的示例代碼如何確定從Runtime.exec()調用的mysqldump是否失敗

String dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+demo(//database name); 
Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(dumpCommand);      
InputStream in = proc.getInputStream();    
BufferedReader br=new BufferedReader(new InputStreamReader(in)); 
String line =null; 

while((line=br.readLine())!=null) 
{ 
//..... 
} 

這段代碼成功運行,即使數據庫名稱不包含在MySQL

+1

您應該修改一個標題 「調用Runtime.getRuntime()在Java中說:」 很瞭解題。 – Fredrik 2010-02-19 07:28:07

+1

當你在Vista上運行你的程序(不僅僅是)時,你可能會遇到一些問題,因爲你在'Program'和'Files'之間有空格,系統會認爲'C:/ Program'是你的exe文件。把C:/ Program Files/MySQL/MySQL Server 5.0/bin/mysqldump \「-h」' – 2010-02-19 07:34:55

+0

你應該更喜歡'rt.exec(「C:/ Program Files/MySQL/MySQL Server 5.0/bin/mysqldump「,new String [] {」-h「+ hostName + user + demo});'由於@True Soft提及的原因 – sfussenegger 2010-02-19 08:19:39

回答

0

以下兩種錯誤:

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect

mysqldump: Got error: 1049: Unknown database 'database1name' when selecting the database

基於此,您可以執行以下操作

String output = IOUtils.toString(inputStream) 
int errIdx = output.indexOf("mysqldump: Got error: "); 
if (errIdx != -1) { 
    throw new RuntimeException("Failed to perform dump. The error message is: " 
     + output.substring(idx)); 
} 

如果你不想使用IOUtils(從commons-io),你可以用你的while(..)方法,並做了上述檢查那裏。

+0

依賴錯誤消息的準確措辭應該肯定是最後的手段我不知道,但也許MySQL有錯誤信息(或可能在將來的版本中)。在這種情況下,除了非英文安裝的任何錯誤消息之外,您的代碼會很高興 – sfussenegger 2010-02-19 08:16:57

+0

@ sfussenegger,因爲這是一個命令行程序,它(通過快速查找手冊來判斷)沒有i18n,我猜是唯一的經驗方法。 – Bozho 2010-02-19 08:24:46

+0

由@Rickard回答,'mysqldump'返回在錯誤情況下爲非空狀態 – sfussenegger 2010-02-19 09:12:57

1

後:

Process proc = rt.exec(dumpCommand);

檢查返回值,喜歡的東西:

 
if (proc.waitFor() != 0) 
    return; 
+0

+1雖然默默迴歸肯定不適合處理這種情況。但是,嘿,這是你的第一票,我不想太迂腐;) – sfussenegger 2010-02-19 08:13:31

+0

是的,你是對的。我的回答更多的是如何處理這個問題的暗示。 ;) – 2010-02-19 15:32:28