有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql mysqldump在java中不起作用

我正在使用此命令行参数克隆数据库:-

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump"  -u root -ppass -d oldDB | mysql -u root -ppass -DnewDB

当直接粘贴到命令行中时,此项工作正常。但是,当我尝试使用java运行此参数时,它不起作用。我的java代码是:-

 String serverLoc = "C:\\Program Files\\MySQL\\MySQL Server 5.6\\";
 String a = "\"" + serverLoc + "bin\\mysqldump\" " ;
 String cmd = a + "-u root -ppass -d oldDB | mysql -u root -ppass -DnewDB";

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

 if (processComplete == 0) {
     System.out.println("SUCCESS");
 } else {
     System.out.println("ERROR");
 }

 //OUTPUT : ERROR

异常处理未显示,因为未打印堆栈跟踪。当我打印cmd时,将打印上面所需的字符串,粘贴到命令行时,该字符串可以工作。请帮我解决这个难题


共 (1) 个答案

  1. # 1 楼答案

    我相信在windows上,您必须以这种方式调用命令:

    Runtime.getRuntime().exec("cmd " + ecuteCmd)
    

    另外,我认为最好使用Runtime.getRuntime().exec(String[])方法

        String prog = "C:\\program files\\server\\xampp\\mysql\\bin\\mysql";
        String user = "-uroot";
        String pass = "-ppass";
        Process runtimeProcess = Runtime.getRuntime().exec(new String[] { prog, user, pass });
    

    使用ProcessBuilder的现代方式:thx@Daniel

        String prog = "C:\\program files\\server\\xampp\\mysql\\bin\\mysql";
        String user = "-uroot";
        String pass = "-ppass";
    
        ProcessBuilder builder = new ProcessBuilder(prog, user, pass);
        Process runtimeProcess = builder.start();
        int result = runtimeProcess.waitFor();
        //...