带有mysqldump的Java Runtime exec()

时间:2017-03-12 20:29:01

标签: java mysql runtime.exec

当我运行mysqldump时,我对Runtime的exec()方法的行为有点好奇。我正在运行以下命令:

mysqldump --user=root --hex-blob [database name] -r [path to sql file]

我想知道的是,运行时搜索mysqldump.exe程序在哪里?

我看到有些人在使用Runtime执行它时提供mysqldump.exe的整个文件路径。为什么是这样?

我很好奇的原因是因为我有两种情况:

  1. 在一台Windows机器上,如果我打开运行并键入“cmd”,它将打开一个命令窗口,其默认位置为C:/。在这台机器上运行mysqldump命令。
  2. 在另一台Windows机器上,如果我打开运行并键入“cmd”,它将打开一个命令窗口,其默认位置为H:/。在此计算机上运行mysqldump命令失败。 Java的Runtime找不到文件mysqldump.exe。
  3. 两台Windows机器是否有可能有不同的默认驱动器,如果我没有提供mysqldump.exe的完整路径,系统会查看默认驱动程序?

    提前致谢!

1 个答案:

答案 0 :(得分:0)

documentation中所述:

  

启动操作系统进程高度依赖系统。在许多可能出错的事情中:

     
      
  • 找不到操作系统程序文件。
  •   
  • 拒绝访问程序文件
  •   
  • 工作目录不存在。
  •   

我建议从ProcessBuilder开始,例如:

 ProcessBuilder pb = new ProcessBuilder("mysqldump ...");
 Map<String, String> env = pb.environment();
 env.put("PATH", env.get("PATH") + ";Path/to/mysqldump");
 try {
    Process process = pb.start();
    //some code
 } catch(IOException e){
 }

这样可以确保正确设置环境变量。