2010-01-27 102 views
8

只有當數據庫名稱包含像(新的數據庫(身份識別碼)等 我給下面的示例代碼,我無法讀取文件:調用Runtime.getRuntime()EXEC()

dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+databaseName; 
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) 
{ 
//able to read line only when database name like abc,datastore etc... 
System.out.println(line); 
    } 

假設我的數據庫名でも意味着當我打印行我的數據庫名稱只喜歡去。 可能在數據庫名稱與空的空間?

回答

15

你熟悉的exec雙引號的錯誤?(對於Runtime.execProcessBuilder

你可以試試:

Runtime.getRuntime().exec(new String[] { 
    "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\"", 
    "-h", 
    hostName+user+databaseName}); 

只要確保不關你的參數,你將不得不通過包含雙引號(而開始用雙引號
(見bug 6511002

任何參數如:

mykey="my value with space" 

將改變內部(由getRuntime()實現)到

"mykey="myvalue with space"" 

如果是這樣的話,你就需要來標記參數:

{"mykey=\"my\"" , "\"value with space\""} 
0

看來mysqldump的語法是有點不同的,下面是我的工作示例 的mysqldump -h mysserver -u root -p my_db -R> create_db.sql 我想你應該把我們e「」或「`複雜的名字(沒有檢查自己)。

0

我不確定如果我完全理解你的問題,但你的dumpCommand似乎將所有變量(hostName,user,databaseName)連接成一個大字符串。

做一個System.out.println(dumpCommand);看看你是否真的想要執行。

您可能在此處缺少一些空格。

如果「 - 」本身是一個問題,您可能想要將其轉義,否則mysqldump會認爲它是一個參數。

2

Java和操作系統需要知道什麼是命令,什麼是參數。所以:

1)你可以嘗試使用exec(String, String[])由單獨

2提供CMD和參數)你可以附上mysqldump命令和每個參數爲雙引號的OS知道他們的單一的東西。

如果使用(1)選項,mysqldump程序將在數組中按項目接收一個參數,而不管空格或其他。

2

文件路徑包含空白,可能是(其中一個)問題。試試這個:

dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h" 
       +hostName+user+databaseName; 

,並按照phisch的suggstion打印dumpCommand String要仔細檢查,這是一個有效的mysqldump呼叫

相關問題