2017-03-02 162 views
-2

我试图运行下面的命令:运行mysql命令从Java

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql" -u root -padmin <C:\script.sql> C:\redir.txt 

通过使用此Java代码:

Runtime.getRuntime().exec(command); 

其中command是包含mysql命令字符串。如果我使用cmd命令,它可以很好地工作,但是如果我运行java行,它不会创建带有查询结果的redir.txt。我无法弄清楚它为什么不起作用(顺便说一下,它不会抛出任何异常或错误信息)。

+0

exec()具有一些特殊属性,使得它很难直接使用。这是一篇非常有用的文章:http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html。不过,我也会发布你的代码。 –

+0

为什么?它作为一项服务运行。它旨在作为服务运行。创建又一种启动方式到底是什么? – EJP

回答

0

各种问题,从这里开始:

< C:\script.sql 

分别存在。

> C:\redir.txt 

这些“重定向”根本无法在您从Java发送的命令中使用。含义:那些“<”和“>”由cmd.shell处理。

可能可能创造像

cmd.exe .... 

与这些管道工程的命令;但我不确定。什么肯定会有效:

  • 使用进程生成器并获取子进程的stdin输入;和其标准输出/ stderr输出流
  • 写入script.sql的含量成标准输入流和 读取stdout流,例如以推送进入redir.txt OUTFILE
  • 写入Java代码

最后:你必须转义\\\在您的命令字符串文字!

0

将该命令放入批处理文件/ bash脚本(取决于您的环境),并使用exec()调用该命令。 Java的exec()有很多问题,特别是在涉及命令行参数的地方,所以这通常是解决这个问题的最好方法。