2013-07-15 45 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