0

此代码确实恢复了 mysql 表,但应用程序几乎进入睡眠状态(超过 20 分钟)。而且我的数据库例程没有出现在 mysql 工作台中,有人可以告诉我实际的解决方案是什么吗?

public static boolean restoreDB(String dbName, String dbUserName, String dbPassword, String source) {

    String[] executeCmd = new String[]{"C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysql", "--user=" + dbUserName, "--password=" + dbPassword, "-e", "source \"D:/khokher/mydb.sql\""};

    Process runtimeProcess;
    try {

        runtimeProcess = Runtime.getRuntime().exec(executeCmd);
        int processComplete = runtimeProcess.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup restored successfully");
            return true;
        } else {
            System.out.println("Could not restore the backup");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return false;
}
4

1 回答 1

2

使用该Runtime.exec方法时,您必须从它创建的进程中读取输出。否则,该进程会填充其输出缓冲区并停止等待,直到您通过读取输出清空缓冲区。

要从进程中读取输出,您可以从返回的Process对象中 获取输入流exec。您可以从返回的流中读取标准输出,从返回的流中读取getInputStream标准错误getErrorStream

如果可以,请使用Apache Commons Exec库。它使启动外部进程并更容易处理其输入和输出。

于 2012-11-05T07:33:12.907 回答