Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法在java上与mysqldump.exe集成_Java_Mysql_Backup_Mysqldump - Fatal编程技术网

我无法在java上与mysqldump.exe集成

我无法在java上与mysqldump.exe集成,java,mysql,backup,mysqldump,Java,Mysql,Backup,Mysqldump,我试图通过MySQL附带的mysqldump实用程序备份MySQL数据库。我的代码在JAVA上,但它不返回任何内容,因此我无法备份数据库。以下是用于执行此操作的函数: public String getServerDumpData() { new Database("Database.ini"); StringBuilder dumpdata = new StringBuilder(); String execline = ""; try { if

我试图通过MySQL附带的mysqldump实用程序备份MySQL数据库。我的代码在JAVA上,但它不返回任何内容,因此我无法备份数据库。以下是用于执行此操作的函数:

public String getServerDumpData()
{
    new Database("Database.ini");
    StringBuilder dumpdata = new StringBuilder();
    String execline = "";
    try {
        if(Database.ConnectToDatabase()){
            // Set path. Set location of mysqldump
            //  For example: current user folder and lib subfolder
            if( HelpersToolbox.IsWindows() ){
                execline = System.getProperty("user.dir") + "\\mysql\\mysqldump.exe";
            }else{
                execline = System.getProperty("user.dir") + "\\lib\\mysqldump.exe";
            }
            // Usage: mysqldump [OPTIONS] database [tables]
            // OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
            // OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
            String command[] = new String[]{ execline,
                            "--host=" + Database.DbServer,
                            "--port=" + Database.DbPort,
                            "--user=" + Database.DbUsername,
                            "--password=" + Database.DbPassword,
                            "--compact",
                            "--complete-insert",
                            "--extended-insert",
                            "--skip-comments",
                            "--skip-triggers",
                            Database.DbName };

            // Run mysqldump
            ProcessBuilder pb = new ProcessBuilder(command);
            Process process = pb.start();



            InputStream in = process.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));


            int count;
            char[] cbuf = new char[STREAM_BUFFER];

            // Read datastream
            while ((count = br.read(cbuf, 0, STREAM_BUFFER)) != -1){
                dumpdata.append(cbuf, 0, count);

            }
            // Close
            br.close();
            in.close();
        }

    } catch (Exception ex) {

        ex.printStackTrace();
        return "";
    }
    return dumpdata.toString();
}

它无法在最后访问循环。那么这里的问题是什么呢?

错误流中有数据,您还必须使用

pb.redirectErrorStream(true);

在启动流程之前。

它无法访问末尾的循环
?它根本无法访问循环。如果您检查流程的exitValue,您会得到什么?另外,您是否已尝试打印命令数组以查看它是否实际保存了您认为应该保存的内容?当我尝试打印exitValue时,会出现以下异常:java.lang.IllegalThreadStateException:进程没有exited@Hatem但是它是否给了您一个错误指示(如果您在收到数据时打印数据)?dumpdata.toString()返回为空字符串。在正常条件下,它不得为空。