1

プログラムに Java と Mysql を使用しています。データベースを復元するためにスクリプト ファイルを使用しています。

Javaの下で私はコマンドを実行しています:ビンの下:mysql -u root -proot test< c:\test.mysql

コマンドラインで実行すると、正しく実行され、データベースが復元されます。

知っている人はいますか..なぜそれが起こるのか..何が問題なのか、Java環境で実行すると実行されないのはなぜですか。

正確な構文: I m Using Process P= runtime.getRunTime().exec(FilePath)

FilePath 変数の値: mysql -u root -proot test< c:\test.mysql

Windows 環境を使用しています。一方、CmdLine で FilePath を実行すると、完璧な結果が得られます。

非常に感謝または助けます。

4

2 に答える 2

2

私も同じ問題を抱えていました!

実際、私が(Windowsで、他のプラットフォームをテストしていない)動作させることができるのは、バッチファイルを使用することだけです。

コードは次のとおりです。

public class MysqlDatabase {

private int BUFFER = 10485760;
private String host, port, user, password, db;

public MysqlDatabase(String host, String port, String user, String password, String db) {
    this.host = host;
    this.port = port;
    this.user = user;
    this.password = password;
    this.db = db;
}

public boolean restoreDatabase(String filepath) throws Exception {
    String comando = "mysql " + db + " --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " < " + filepath;
    File f = new File("restore.bat");
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(comando.getBytes());
    fos.close();
    Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");
    return true;

}

public String getFull() throws Exception {

    Process run = Runtime.getRuntime().exec(
            "mysqldump --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " --opt "
            + "" + db);
    InputStream in = run.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    StringBuilder temp = new StringBuilder();

    int count;
    char[] cbuf = new char[BUFFER];

    while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
        temp.append(cbuf, 0, count);
    }

    br.close();
    in.close();

    return temp.toString();
}}
于 2010-11-23T09:26:08.280 に答える
0

もう少し情報が必要だと思います。パスが同じように設定されている限り、コマンド ラインから実行する場合は、Runtime.exec() からも同じように実行する必要があります。どのようなエラーが表示されますか?

パスとコマンド出力をファイルにエコーして後で確認できるように、スクリプトでコマンドを設定してみてください。UNIXでは、次のようになります

 LOGFILE=my.log
 echo $PATH > $LOGFILE
 env >> $LOGFILE
 mysql -u root -proot test< c:\test.mysql >> $LOGFILE 2>&1

Windows を使用しているようですので、コマンド ファイルをこのように正確に設定する方法がわかりません。重要なのは、mysql コマンドのエラー出力をファイルに送信していることを確認することです。

于 2009-05-16T14:35:18.013 に答える