Я не могу интегрироваться с mysqldump.exe на Java - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь сделать резервную копию базы данных 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();
}

Он не может получить доступ к циклу в конце. Так в чем здесь проблема?

1 Ответ

0 голосов
/ 09 декабря 2011

У вас есть данные в потоке ошибок, которые вы также должны прочитать или объединить с выходным потоком, используя

pb.redirectErrorStream(true);

до начала процесса.

...