0

我想将 MYSQL 表从远程服务器备份到本地服务器,我必须在我的 java 应用程序中执行此操作。我正在尝试运行以下查询来执行此操作:

C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump --opt --where='1 limit 10' -h abcd -u root -proot remoteDB remotetable|mysql -u root -pcanada localDB

当我通过命令行运行查询时,查询运行得非常好,但是当我通过我的 java 应用程序运行它时,它无法创建任何备份,而且奇怪的是也没有显示任何输出。以下是代码:

    public static void main(String[] args) {
    Process p;
    String s="C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump --opt " +
                "--where='1 limit 1'  -h a.b.c.d  -u root -proot remoteDB remoteTable|mysql -u root -pcanada " +
                "localDB";
    try {
        p = Runtime.getRuntime().exec(s );
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line=reader.readLine();

        while (line != null) {    
            System.out.println(line);
            line = reader.readLine();
        }
    }
    catch (InterruptedException e) {
        System.out.println("fsff"+e);
            e.printStackTrace();
    } catch (IOException e) {
        System.out.println("fsdaf"+e);
            e.printStackTrace();
    }

}

请任何人都可以建议我为什么不通过我的 java 应用程序运行它。在此先感谢 :)

4

2 回答 2

1

Runtime.exec 不是外壳。它只启动一个进程,不处理输入和输出流重定向,因此command1 | command2不起作用。

作为一种解决方法,您可以将命令写入 .cmd 文件并使用 cmd.exe 运行它。

于 2013-06-30T11:45:39.700 回答
1

大多数开发人员会使用库从 Java 进行 MySQL 查询,而不是尝试将命令写入外部程序并收集输出。

例如,参见http://dev.mysql.com/doc/refman/5.6/en/connector-j-usagenotes-statements.html#connector-j-examples-execute-select

于 2013-06-30T11:49:11.053 回答