我正在写一个需要执行mysql dump的java应用程序,并且我使用的是基于when runtime.exec won't文章的runtime.exec。代码如下:试图从java应用程序执行mysqldump,多个问题
public int exectuteCommand(){
Runtime rt = Runtime.getRuntime();
logger.debug("exexuting cmd: " + showCommand());
int exit = -1;
try {
Process proc = rt.exec(cmd);
ExtProcessStreamHandler errorHandler = new ExtProcessStreamHandler(proc.getErrorStream(), "ERROR");
ExtProcessStreamHandler outHandler = new ExtProcessStreamHandler(proc.getInputStream(), "OUTPUT");
// kick it off
errorHandler.start();
outHandler.start();
exit = proc.waitFor();
} catch (IOException e) {
logger.error("ERROR!! ~~ executing command " + showCommand(), e);
e.printStackTrace();
} catch (InterruptedException e) {
logger.error("ERROR!! ~~ unexpected return for " + showCommand() + " , returned " + exit, e);
e.printStackTrace();
}
return exit;
}
1)进程返回的命令在shell中运行(我在mac上运行这个命令)。我遇到的第一个错误是无法找到mysqldump命令。这导致了这个错误:
java.io.IOException: Cannot run program "mysqldump": error=2, No such file or directory
我解决了通过将文件的完整路径添加到命令。 $ PATH var显示为
/usr/local/mysql/bin/mysqldump
作为完整路径。我如何确保我的Java应用程序具有该信息?
2)将完整路径的命令时,我得到这个错误信息:
INFO [Thread-1] (ExtProcessStreamHandler.java:28) - external process ERROR : mysqldump: Couldn't find table: ">"
这是建立命令数组的代码:再次
return new String[] {MYSQLDUMP_CMD, "-u", USER_DEFAULT, "-p"+ PW_DEFAULT, TEST_DB_NAME,
">", DUMP_LOC};
,当我复制该命令传递给我的苹果机上的外壳的Java应用程序,它的工作原理。不知道我做错了什么。 在此先感谢!
能够使用--result-file选项而不是> – badperson