0

データベースのバックアップを取りたい。私はmysqlデータベースとwampサーバーを使用しています。そのために、次のコードを書きました。

Process runtimeProcess =Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe -u root -pkarma dailyreport -r  "+assign+"\\dailyreport.sql");  
int processComplete = runtimeProcess.waitFor();  
if(processComplete == 0)
{  
JOptionPane.showMessageDialog(null, "Backup has been taken successfully", "BackUp", JOptionPane.INFORMATION_MESSAGE);
} 
else 
{  
JOptionPane.showMessageDialog(null, "Could not take backup", "BackUp", JOptionPane.INFORMATION_MESSAGE); 
}

上記のコードで、文字列の割り当ては、データベースのバックアップを保存するパスを示します。しかし、問題は、実行時にバックアップを保存する場所を取得していることです。フォルダー名にスペースが含まれるパスを選択すると、スペースが含まれているためシステムがパスを取得できないため、バックアップを取得できませんでした。変更方法を教えてくださいruntime.getruntime.exec() コマンド。

4

3 に答える 3

4

Stringコマンドを配列内の個別の要素として渡します

String[] cmds = new String[] {
    "C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe",
    "-u",
    "root",
    "-pkarma",
    "dailyreport",
    "-r",
    assign+"\\dailyreport.sql"};

    Process runtimeProcess = Runtime.getRuntime().exec(cmds);

配列内の各要素は、コマンドの個別のパラメーターになります。

さらに良いことに、ProcessBuilderを使用してください

于 2012-09-17T07:17:17.957 に答える
1

パスを二重引用符で囲みます。これにより、スペースが存在するため、シェルは引数全体を複数の引数ではなく単一の引数として認識することができます。

Process runtimeProcess = 
    Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe "
        + "-u root -pkarma dailyreport -r  \"" 
        + assign + "\\dailyreport.sql\" ");  
于 2012-09-17T07:09:04.317 に答える
1

assign文字列を引用符で囲んでみてください:

Process runtimeProcess = Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql"
    + "\\mysql5.5.20\\bin\\mysqldump.exe -u root -pkarma dailyreport "
    + "-r  \""+assign+"\"\\dailyreport.sql");  
于 2012-09-17T07:09:55.253 に答える