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); 
}

在上面的代码中,String assign 表示我要保存数据库备份的路径。但问题是我正在运行时保存备份的位置。如果我选​​择文件夹名称包含空间的路径,它无法进行备份,因为系统没有获取路径,因为它包含空间。请帮助我应该如何更改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

用双引号将路径括起来。由于空间的存在,这将有助于 shell 将整个参数视为单个参数而不是多个参数。

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 回答