我想将MYSQL表从远程服务器备份到我的本地服务器,我必须在我的java应用程序中执行此操作。我正在尝试运行以下查询:
C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin \ mysqldump --opt --where ='1 limit 10'-h abcd -u root -proot remoteDB remotetable | mysql -u root -pcanada localDB
当我通过命令行运行它时,查询运行得非常好,但当我通过我的java应用程序运行它时,它无法创建任何备份,奇怪的是也没有显示任何输出。以下是代码:
public static void main(String[] args) {
Process p;
String s="C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump --opt " +
"--where='1 limit 1' -h a.b.c.d -u root -proot remoteDB remoteTable|mysql -u root -pcanada " +
"localDB";
try {
p = Runtime.getRuntime().exec(s );
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch (InterruptedException e) {
System.out.println("fsff"+e);
e.printStackTrace();
} catch (IOException e) {
System.out.println("fsdaf"+e);
e.printStackTrace();
}
}
请有人建议我为什么不通过我的java应用程序运行它。提前谢谢:)
答案 0 :(得分:1)
Runtime.exec不是shell。它仅启动一个进程,并且不处理输入和输出流重定向,因此command1 | command2
将不起作用。
作为一种解决方法,您可以将命令写入.cmd文件并使用cmd.exe运行。
答案 1 :(得分:1)
大多数开发人员会使用库从Java进行MySQL查询,而不是尝试将命令写入外部程序并收集输出。