3

Runtime.getRuntime 経由で Java から同じコマンドを実行すると、リターン コード 6 が返されます。同じコマンドは、コマンド ラインから正常に動作します。

process = Runtime.getRuntime().exec(mysqldumpCommand);
int processComplete = process.waitFor();

これらの 2 つのコマンドについては、Java から実行し、ダンプなしで実行すると、戻りコード 6 が返されます。コマンドラインからは正常に動作します(ローカル環境にパスワードがありません。)

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
mysqldump --user=root --password="" --host=localhost dbname > c:\temp\dumpfile.sql

故意に間違ったパスワードを入力すると、Java でリターン コード 2 が返され、コマンド ラインで接続エラーが発生します。

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql

ここで見つけたリターンコード:

Taken from client/mysqldump.c in MySQL 5.1.59:

#define EX_USAGE 1
#define EX_MYSQLERR 2
#define EX_CONSCHECK 3
#define EX_EOM 4
#define EX_EOF 5 /* ferror for output file was got */
#define EX_ILLEGAL_TABLE 6

Java で同じコマンドを実行すると (エラー) リターン コード 6 が返され、コマンド ラインから正常に動作するのはなぜですか?

後で編集:Windowsから試します。

4

2 に答える 2

5

Runtime.execは shellではないため、 > および < によるリダイレクトは機能しません。現在、コマンドは に渡さ>mysqldump、エクスポートするテーブルの名前として解釈されます。(したがって、戻りコード 6、「不正なテーブル」。)

次の 2 つの解決策があります。

  1. シェルを実行します。あなたが持っているものの代わりにこのコマンドを使用してください:

    cmd.exe /c "mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql"
    
  2. を使用して、コマンドからの出力を自分でファイルに書き込みますProcess.getInputStream()

于 2013-03-17T17:49:30.363 に答える