Win7上Java代码中的mysqldump问题

好的,我的Java应用程序无法使用Windows运行时环境执行mysqldump备份。我有捕获异常的打印输出代码,并且我没有看到抛出异常,在执行备份代码时表面看起来很好。

我也在命令行控制台中测试了mysqldump命令;它在那里没有问题。

码:

Runtime rt = Runtime.getRuntime();
try {
    Process pr = rt.exec("mysqldump -u test --password=pass lager > newBackup.sql");

} catch (IOException ex) {
     System.out.println("IO error Runtime.  "+ex.getMessage());
}

有谁知道为什么它不会转储/备份数据库?是否有一些我需要添加的权限或者什么(运行Windows 7)。

0
额外 编辑
意见: 1
那就是事情,它不会抛出任何异常。它用于当我得到命令错误,或没有mysqldump作为PATH变量。没有文件正在输出,我不知道为什么,因为没有任何反馈。
额外 作者 gorn,
你正在打印 ex.getMessage(),但你没有告诉我们它说了什么?
额外 作者 Radu Murzea,

1 答案

也许你可以看看这篇文章关于beetwen exec和命令行的区别( http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html )。

在我的身边,我尝试使用这个代码捕获mysqldump的输出--help命令,并使用Class StreamGoggle查找来自javaworld的文章:

    public Main() {
    try {
        FileOutputStream fos = new FileOutputStream("c:/tmp/test.txt");
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("mysqldump --help");
       //any error message?
        StreamGobbler errorGobbler = new StreamGobbler(
                proc.getErrorStream(), "ERROR");

        StreamGobbler outputGobbler = new StreamGobbler(
                proc.getInputStream(), "OUTPUT", fos);

        errorGobbler.start();
        outputGobbler.start();

        int exitVal = proc.waitFor();
        System.out.println("ExitValue: " + exitVal);
        fos.flush();
        fos.close();
    } catch (Throwable t) {
        t.printStackTrace();
    }
}
0
额外