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 はシェルではありません。1 つのプロセスのみを開始し、入力および出力ストリームのリダイレクトを処理しないため、機能しませんcommand1 | command2

回避策として、コマンドを .cmd ファイルに書き込み、cmd.exe で実行できます。

于 2013-06-30T11:45:39.700 に答える