此代码确实恢复了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;
}
答案 0 :(得分:2)
使用Runtime.exec
方法时,必须从其创建的进程中读取输出。否则,进程将填充其输出缓冲区并停止等待,直到您通过读取输出清空缓冲区。
要读取进程的输出,您可以从Process
返回的exec
对象获取输入流。您可以从getInputStream
返回的流中读取标准输出,并从getErrorStream
返回的流中读取标准错误。
如果可以,请使用Apache Commons Exec库。它使得启动外部流程并更容易处理其输入和输出。