gpt4 book ai didi

java - 来自 Java 应用程序的 mysqldump

转载 作者:可可西里 更新时间:2023-11-01 07:47:11 24 4
gpt4 key购买 nike

尝试使用以下命令从 Java 应用程序 (IDE Netbeans) 备份 mysql 数据库,但似乎无法找到该文件,即使我指定了路径:

Runtime.getRuntime().exec("C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;");

另外,我没有收到任何错误,所以我假设备份已经完成。我怎样才能找到该文件? 关于 fisier.getName():文件 fisier = jFileChooserSave.getSelectedFile();

最佳答案

您可以测试下面提到的代码来测试您的 mysqldump 命令输出。根据我的假设,文件未创建的主要原因可能有两个:-

  1. 如果使用 Windows,则目标位置的 UAC 权限可能是个问题。
  2. 您可能会在最终生成的 mysqldump 命令中遇到语法问题,该命令将由 java 运行时执行。

     //Process exec = Runtime.getRuntime().exec("C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;");

    Process exec = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;"});

    //Wait for the command to complete, and check if the exit value was 0 (success)
    if(exec.waitFor()==0)
    {
    //normally terminated, a way to read the output
    InputStream inputStream = exec.getInputStream();
    byte[] buffer = new byte[inputStream.available()];
    inputStream.read(buffer);

    String str = new String(buffer);
    System.out.println(str);
    }
    else
    {
    // abnormally terminated, there was some problem
    //a way to read the error during the execution of the command
    InputStream errorStream = exec.getErrorStream();
    byte[] buffer = new byte[errorStream.available()];
    errorStream.read(buffer);

    String str = new String(buffer);
    System.out.println(str);

    }

重定向运算符在使用时不起作用Process exec = Runtime.getRuntime().exec("C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+"> C:\\"+fisier.getName()+.sql;");

因为它不调用命令外壳,所以我们无法获得重定向运算符的功能,为了解决这个问题,我们可以执行命令提示符 (cmd),然后执行 mysqldump 命令,它会起作用。

Process exec = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+"> C:\\"+fisier.getName()+".sql;"});

cmd.exe 中的/c 指定执行传递的命令并终止进程。java运行时执行的实际命令会变成

cmd.exe/c yourmysqldumpCommand

关于java - 来自 Java 应用程序的 mysqldump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com