如何将mysql命令传递给ProcessBuilder

时间:2019-01-22 09:56:35

标签: java mysql processbuilder

这就是我拥有的:

List<String> restoreCmds = new ArrayList<>();
restoreCmds.add("mysql");
restoreCmds.add("-h" + host);
restoreCmds.add("-u" + login);
restoreCmds.add("-p" + pass);
restoreCmds.add("-e 'source dump.sql'");
restoreCmds.add(targetDB);

ProcessBuilder pb = new ProcessBuilder(restoreCmds);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process pr = pb.start();

int exitVal = pr.waitFor()

我收到以下错误:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''source dump.sql'' at line 1

2 个答案:

答案 0 :(得分:1)

您不需要为源添加报价。

我将路线更改为关注并为我工作。

restoreCmds.add("-e source dump.sql");

答案 1 :(得分:0)

-e选项用于直接执行指定的命令,就像您在手册中看到的那样:

  

-execute = statement,-e语句

     

执行该语句并退出。禁用--force和历史记录文件。默认输出格式类似于--batch产生的格式。

您应该使用输入重定向将带有sql的源文件用于执行。

警告:此外,您还应该指定要操作的数据库的名称。