【问题标题】:executing mysql restore cmd in java runtimeProcess.waitFor() returns 1 always在 java 运行时 Process.waitFor() 中执行 mysql restore 命令总是返回 1
【发布时间】:2015-10-12 13:52:14
【问题描述】:

下面的代码总是返回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");
}

【问题讨论】:

  • 您是在 Windows 还是 Linux 上运行?
  • 我在linux环境下。
  • 输入重定向 ("

标签: java mysql command-line restore


【解决方案1】:

我绞尽脑汁想解决这个问题一个星期,终于弄明白了。

问题是,上面代码中的&lt;(流重定向)。在 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+"\"";

【讨论】:

    【解决方案2】:

    重定向&lt; 由命令外壳解释。试试

    String executeCmd[] =
           {"bash", "-c", "mysql", "-u", dbUser, "-p", dbPass, "-A","-D", dbName , "< ", restorePath};
    

    【讨论】:

    • 我认为参数不应该串联:"-u" + dbUser -> "-u", dbUser
    • @Bee 你在阅读ErrorStreamruntimeProcess 时看到了什么错误?
    • 没有打印错误流,但 processComplete 正在变成 1 InputStream error = runtimeProcess.getErrorStream(); for (int i = 0; i
    猜你喜欢
    • 2012-03-12
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多