0

Javaで開発したデスクトップアプリケーションの1つに「バックアップの作成」オプションを追加しようとしています。私はこれについて多くのことを検索し、この問題を解決するためのいくつかのアプローチを見つけましたが、それらはすべて、単一の重要な概念「移植性」を破壊します。多くの人がこれを行うためにmysqldump.exe(Windows内)を使用することを提案していますが、このアプローチを取るにはmysqlインストールフォルダーを知る必要があると思います。ちなみに正しく動作しなかった推奨コードは以下のとおりです(理由はわかりませんが、理由に気づいたら教えてください)

private static String dbName = "shams";
private static String dbUserName = "root";
private static String dbPassword = "";

public static boolean backupDB(File file) {
    String path = file.getPath();
    if (!path.contains(".sql")) {
        file = new File(path +".sql");
    }

    String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file.getPath();
    Process runtimeProcess;
    try {

        runtimeProcess = Runtime.getRuntime().exec(executeCmd);
        int processComplete = runtimeProcess.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup created successfully");
            runtimeProcess.destroy();
            return true;
        } else {

            System.out.println("Could not create the backup");
        }


    } catch (Exception ex) {
        ex.printStackTrace();


    }

    return false;
}

また、データベースを特定の場所にコピーすることを提案する人もいます。

だから..私はこれにきちんと何をすべきですか?利用可能なサードパーティのjarファイルはありますか?

- 編集 - -

指定されたコードの問題は、ユーザー(この場合はrootユーザー)のパスワードがない場合、コマンドでパスワードを指定しないようにすることです。コマンドは次のようになります。 String executeCmd = "mysqldump -u " + dbUserName + " --add-drop-database -B " + dbName + " -r " + file.getPath();

また、結局、mysqlインストールフォルダを指定する必要はありません。上記のコードはそのまま動作します。

4

2 に答える 2

1

まず、mysqldump実行可能ファイルの場所を知る必要があるからといって、必ずしも移植性が失われるわけではありません。プログラムのコマンドラインオプションとして、または構成ファイルで、構成パラメーターにするだけです。

次に、mysqldumpコマンドの実行に関する問題は、Runtime.exec()の使用に関連している可能性があります。ProcessBuilderオブジェクトを使用すると、より詳細な制御が可能になります。ここSOおよびWeb全体で、ProcessBuilderの適切な使用に関する多くの質問/回答があります。それらのいくつかは、おそらく役立つでしょう。

私の知る限り、mysqldump実行可能ファイルを実際に実行せずにmysqldumpを実行するすべてのJavaの方法はありません。

于 2012-09-22T14:57:53.673 に答える
1

この問題には純粋なJavaソリューションがあります。例えば

(私はこれらのどちらも適切な仕事をしているかどうかを確認していません... YMMV。)

ただし、適切に復元されないダンプが発生する可能性があるため、サードパーティのダンププログラムの使用には注意が必要です。

はい、プログラムへのパスを知る必要がありますmysqldump。しかし、それは賢明なデフォルトや構成ファイルのエントリを使用して処理できます。あなたの「携帯性を破壊する」コメントは、モグラの丘から山を作ることです。


私はあなたのコードに明らかに悪いことは何も見えません。「標準エラー」と「標準出力」をキャプチャして、その内容を確認することをお勧めしますmysqldump

  • おそらく、それは間違った資格情報または存在しない出力ディレクトリのようなものです。
  • たぶんあなたは間違ったオプションの1つを手に入れました。(それは本当にあなたが-Bオプションを使うことになっている方法ですか??)
于 2012-09-22T15:07:07.670 に答える