当从java运行时,mysqldump返回代码6,但在命令行中同样的命令可以正常工作
当我通过Runtime.getRuntime从Java运行相同的命令时,我得到返回代码6。同样的命令在命令行中也可以正常工作:当从java运行时,mysqldump返回代码6,但在命令行中同样的命令可以正常工作,java,mysql,process,mysqldump,runtime.exec,Java,Mysql,Process,Mysqldump,Runtime.exec,当我通过Runtime.getRuntime从Java运行相同的命令时,我得到返回代码6。同样的命令在命令行中也可以正常工作: process = Runtime.getRuntime().exec(mysqldumpCommand); int processComplete = process.waitFor(); mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql 对于这两
process = Runtime.getRuntime().exec(mysqldumpCommand);
int processComplete = process.waitFor();
mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
对于这两个命令,当从java运行且没有转储时,我得到返回代码6。从命令行可以很好地工作(我在本地环境上没有密码。)
当故意输入错误的密码时,我在java中得到返回代码2,并且在命令行中出现连接错误:
process = Runtime.getRuntime().exec(mysqldumpCommand);
int processComplete = process.waitFor();
mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
我找到的返回代码:
为什么在java中运行同一个命令时会得到(错误)返回代码6,并且可以从命令行正常工作
稍后编辑:我在Windows上试用。,因此使用>和<进行重定向将不起作用。当前,该命令正在将
传递到mysqldump
,该命令将其解释为要导出的表的名称。(因此返回代码6,“非法表”。)
有两种解决方案:
cmd.exe /c "mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql"
Process.getInputStream()
自己将命令的输出写入文件mysqldump现在支持
--result file=
所以看起来是这样的
mysqldump --user=root --password= --host=localhost dbname --result-file=c:\temp\dumpfile.sql
1) 浏览Java World文章,链接自2)实现所有建议(这些建议可能会解决问题,或者为您提供足够的信息来解决问题)。3) 然后在第三个千年加入我们,用
Runtime.exec()
交换一个新的ProcessBuilder
。如果提问者使用的是Windows,那么最好使用cmd.exe/c
而不是sh-c
。啊,很好的一点@Luke,我没有注意到路径中的'c:\'。它在Windows上运行良好,我想在linux上使用sh-c而不是cmd/c可以达到这个目的。