我想从java程序执行.sql文件的数据库导入.我的程序在windows上工作正常.但我在linux机器上遇到问题.
代码 -
try {
ProcessBuilder builder = new ProcessBuilder("mysql -u root -p password db-name < db_script.sql");
builder.redirectErrorStream(true);
Process pr = builder.start();
InputStream is = pr.getInputStream();
// Now read from it and write it to standard output.
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我得到了 - java.io.IOException:无法运行程序"mysql -u root -p password db-name <db_script.sql":java.io.IOException:error = 2,没有这样的文件或目录
上面的命令在linux终端上运行正常.有人请就此提出建议.
提前致谢
<重定向是一个shell的东西.尝试这样的事情:
ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "mysql -u root -p password db-name < b_script.sql");
Run Code Online (Sandbox Code Playgroud)
更新:
否则,如果您使用的是java 7+,则可以在java中进行重定向:
ProcessBuilder builder = new ProcessBuilder(
"mysql", "-u", "root", "-p", "password", "db-name");
builder.redirectInput(ProcessBuilder.Redirect.from(new File("b_script.sql")));
Run Code Online (Sandbox Code Playgroud)