2013-07-15 71 views
-2
String dumpCommand = "C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump" + " -u " + user + " -p" + " " + database + " > " + path;   
Runtime rt = Runtime.getRuntime(); 
File test = new File(path); 
PrintStream ps; 
try{ 
    Process child = rt.exec(dumpCommand); 
    System.out.println("Child" + child); 
    ps = new PrintStream(test); 
    InputStream in = child.getInputStream(); 
    int ch; 

    while ((ch = in.read()) != -1) { 
     ps.write(ch); 
     System.out.write(ch); 
    }   
} 

該代碼無法正常工作。它無限運行?我如何在java上運行mysqldump?代碼不工作,它無限運行?

+0

不要使用'Runtime.exec()',使用'ProcessBuilder' – fge

+0

如何在D:驅動器中使用ProcessBuilder()作爲mysqldump的command.Project位置。 Mysqldump的位置是C:\ ProgramFiles \ MySQL \ MySQLServer5.0 \ bin \ mysqldump \ – Ajithlal

+0

這是Java 7還是Java 6?回答取決於使用java 6的 – fge

回答

2

由於路徑要運行該命令包含空格,你需要引號的:

String dumpCommand = "\"C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump\""+ " -u " + user +" -p" + " "+ database +" > "+path;   

編輯

一個ProcessBuilder將會使這項工作更輕鬆:

// Step 1: set up the command line 
ProcessBuilder pb = new ProcessBuilder(
    "C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump", 
    "-u", 
    user, 
    "-p" 
    database); 

// Step 2: redirect output 
File test = new File(path); 
pb.redirectOutput(test); 

// Step 3: start the process 
Process proc = pb.start(); 

ProcessBuilder類有許多其他功能(請參閱文檔),包括abil可以爲子進程定義環境變量,設置當前目錄以及重定向錯誤輸出。如果事情出錯,後者可能對診斷問題非常有用。

+0

java.io.IOException:無法運行程序「」C:\ ProgramFiles \ MySQL \ MySQLServer5.0 \ bin \ mysqldump「」:CreateProcess error = 3的系統不能找到在java.lang.Runtime中在java.lang.ProcessBuilder.start(ProcessBuilder.java:460)指定 \t路徑 \t在java.lang.Runtime.exec(Runtime.java:593) \t .exec(Runtime.java:431) \t at java.lang.Runtime.exec(Runtime.java:328) \t at Dbcon.demoback.main(demoback.java:65) 由於:java.io.IOException :CreateProcess error = 3,系統找不到指定的路徑 – Ajithlal

+0

如何使用ProcessBuilder()fo r mysqldump命令。D:驅動器中的項目位置。 Mysqldump的位置是C:\ ProgramFiles \ MySQL \ MySQLServer5.0 \ bin \ mysqldump \ – Ajithlal

+0

@Ajithlal - 我添加了一些示例代碼。嘗試直接從命令行執行您正在構建的命令來驗證它是否有效,然後嘗試從Java執行它可能是值得的。 –

0

或者您可以使用String.trim()方法來過濾空間。

+0

修剪只是在字符串的開始和結束處剪切空白。 泰德寫的東西是在可執行文件的文件路徑中的空白處加以修飾的,如果修剪會過濾空格,它會中斷命令。 – Matthias