当从java运行时,mysqldump返回代码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 对于这两

当我通过Runtime.getRuntime从Java运行相同的命令时,我得到返回代码6。同样的命令在命令行中也可以正常工作:

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可以达到这个目的。