我有一个 SQL 脚本,我想从一个在 Windows 上运行的 Java 类中执行。我目前正在尝试在以下函数中使用 ProcessBuilder
来执行此操作:
public static boolean runSqlScript(String filename, String user, String password) {
ProcessBuilder pb = new ProcessBuilder("mysql", "-u"+user, "-p"+password, "< "+ filename);
try {
Process pr = pb.start();
BufferedReader errors = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
BufferedReader output = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while (pr.isAlive()) {
try {
System.err.println(errors.readLine());
System.out.println(output.readLine());
Thread.sleep(10);
} catch (InterruptedException e) {
break;
}
}
System.err.println(errors.readLine());
System.out.println(output.readLine());
int status = pr.exitValue();
return (status == 0);
} catch (IOException e) {
System.err.println("Error running command: " + e.getMessage());
return false;
}
}
文件名是脚本的绝对路径,用户和密码验证正确。但是当我运行它时,我得到了错误:
ERROR 1102 (42000): Incorrect database name '< c:/path/to/script.sql'
为什么将其解释为数据库名称而不是命令行参数?我可以使用 ProcessBuilder 来运行这样的脚本吗?
最佳答案
您需要添加数据库名称,它会起作用ProcessBuilder pb =
new ProcessBuilder("cmd", "/c", "mysql", "-u"+user, "-p"+password,"dbname", " < "+ filename);
关于java - 如何使用 ProcessBuilder 运行 MySQL 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947148/