备份mysql数据库的java代码

我试图运行以下代码,即创建我的数据库备份,但它显示一些运行时错误。

但是,我尝试在mysql shell中运行System.out.println()输出部分(我在给定的代码中评论过) 并且它工作正常

它显示了io文件问题。 Plz有人帮助我。

package files; public class tableBackup_1 { public boolean tbBackup(String dbName,String dbUserName, String dbPassword, String path) { String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path; Process runtimeProcess; try { System.out.println(executeCmd);//this out put works in mysql shell runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); if (processComplete == 0) { System.out.println("Backup created successfully"); return true; } else { System.out.println("Could not create the backup"); } } catch (Exception ex) { ex.printStackTrace(); } return false; } public static void main(String[] args){ tableBackup_1 bb = new tableBackup_1(); bb.tbBackup("test","harin","1234","C:/Users/Master/Downloads/123.sql"); } } 
  mysqldump -u harin -p1234 --add-drop-database -B test -r C:/Users/Master/Downloads/123.sql java.io.IOException: Cannot run program "mysqldump": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at java.lang.Runtime.exec(Runtime.java:593) at java.lang.Runtime.exec(Runtime.java:431) at java.lang.Runtime.exec(Runtime.java:328) at files.tableBackup_1.tbBackup(tableBackup_1.java:12) at files.tableBackup_1.main(tableBackup_1.java:34) Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.(ProcessImpl.java:81) at java.lang.ProcessImpl.start(ProcessImpl.java:30) at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) ... 5 more 

请检查您的Global PATH环境变量是否包含 \ bin(执行echo %PATH%并查看)。 实际上,您应该能够在Plain DOS提示符下键入System.out.println()内容,并且应该能够运行它。

即使这样,如果它不起作用尝试更改代码执行如下所示

 runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd }); 

这应该理想地解决问题。

更新:

如果在PATH环境变量中没有它,请将代码更改为以下内容

 String executeCmd = "/bin/mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path; 

runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd });

我试过这个,但它不起作用,所以我用它替换它

this runtimeProcess = Runtime.getRuntime().exec(executeCmd);

它工作

我通过提供mysqldump.exe的完整路径解决了这个问题

您可以通过获取SO环境变量

 Map env = System.getenv(); final String LOCATION = env.get("MYSQLDUMP"); 

我像这样设置系统变量:

  • 变量名称: MYSQLDUMP
  • 值: D:\xampp\mysql\bin\mysqldump.exe

现在只需执行以下代码,

 String executeCmd = LOCATION+" -u " + DBUSER + " --add-drop-database -B " + DBNAME + " -r " + PATH + ""+FILENAME Process runtimeProcess = = Runtime.getRuntime().exec(executeCmd); 

注意:如果您没有为mysql服务器配置密码,只需从代码中删除-p PASSWORD属性即可。 并且不要忘记在创建新的系统变量后重新启动计算机。