gpt4 book ai didi

java - 如何使用运行时/进程类从java备份mysql数据库?

转载 作者:行者123 更新时间:2023-11-29 06:10:53 24 4
gpt4 key购买 nike

我对这段代码有疑问:

 try {            
String cmd = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe -uroot -proot foo_db -rC:\\backup.sql";

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);

} catch(Exception e) {}

它不会出现任何错误,实际上它不会执行任何操作:没有备份,也没有执行 cmd。问题出在哪里?

这很奇怪,因为cmd文本是正确的...我尝试在Windows中使用“执行”命令来执行它并且它可以工作,但在java中不行。

提前致谢。

最佳答案

正如 @pcalcao 指出的那样,您的第一个问题是您没有报告异常。你真的不应该这样做。至少你应该这样做:

} catch(Exception e) {
e.printStackTrace();
}

java.io.IOException: Cannot run program "C:\Program": CreateProcess error=193, %1 isn't a Win32 valid application

这表明您的应用程序路径有问题。默认情况下,如果使用单个参数调用 exec(),那么它将用空格分隔参数。由于您的路径中有空格,因此您需要将字符串数组传递给exec()。像这样的东西:

try {            
String cmd =
"C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(new String[] { cmd, "-uroot", "-proot", "foo_db",
"-rC:\\backup.sql" });
// wait for it to finish
proc.waitFor();
} catch(Exception e) {
e.printStackTrace();
}

传递给 exec() 的字符串数组中的第一个参数是命令的完整路径 - 这个可以有空格。其他每个数组元素都是该命令的一个参数。

最后,您需要等待该过程完成,否则它将在后台执行。这就是 waitFor() 的作用。

关于java - 如何使用运行时/进程类从java备份mysql数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com