总是在 java runtimeProcess.waitFor() returns 1 中执行 mysql restore cmd
executing mysql restore cmd in java runtimeProcess.waitFor() returns 1 always
下面的代码总是返回1,我不明白为什么。
String executeCmd[] = {"mysql"," -u" + dbUser," -p" + dbPass," -A"," -D"+dbName ," < " + restorePath};
Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) {
System.out.println("Successfully restored from SQL : " + s);
} else {
System.out.println("Error at restoring");
}
重定向 <
由命令 shell 解释。尝试
String executeCmd[] =
{"bash", "-c", "mysql", "-u", dbUser, "-p", dbPass, "-A","-D", dbName , "< ", restorePath};
我绞尽脑汁想解决这个问题一个星期,终于弄明白了。
问题是,上面代码中的<
(流重定向)。在 Java 中执行进程时不能使用流重定向(在这种情况下它根本不起作用)。
因此,您必须在不使用流重定向的情况下执行此操作。一种方法是:
mysql -u root -p**** --execute "SOURCE \path\to\sql"
尝试:
String executeCmd[] = {"mysql"," -u "+dbUser," -p"+dbPass," -A"," -D"+dbName," --execute"," \"SOURCE "+restorePath+"\""};
或者简单地说:
String executeCmd = "mysql -u "+dbUser+" -p"+dbPass+" -A -D "+"dbName -e \"SOURCE "+restorePath+"\"";
下面的代码总是返回1,我不明白为什么。
String executeCmd[] = {"mysql"," -u" + dbUser," -p" + dbPass," -A"," -D"+dbName ," < " + restorePath};
Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) {
System.out.println("Successfully restored from SQL : " + s);
} else {
System.out.println("Error at restoring");
}
重定向 <
由命令 shell 解释。尝试
String executeCmd[] =
{"bash", "-c", "mysql", "-u", dbUser, "-p", dbPass, "-A","-D", dbName , "< ", restorePath};
我绞尽脑汁想解决这个问题一个星期,终于弄明白了。
问题是,上面代码中的<
(流重定向)。在 Java 中执行进程时不能使用流重定向(在这种情况下它根本不起作用)。
因此,您必须在不使用流重定向的情况下执行此操作。一种方法是:
mysql -u root -p**** --execute "SOURCE \path\to\sql"
尝试:
String executeCmd[] = {"mysql"," -u "+dbUser," -p"+dbPass," -A"," -D"+dbName," --execute"," \"SOURCE "+restorePath+"\""};
或者简单地说:
String executeCmd = "mysql -u "+dbUser+" -p"+dbPass+" -A -D "+"dbName -e \"SOURCE "+restorePath+"\"";