总是在 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+"\"";