2015-10-07 3 views
0

Я хочу проверить выполнение команды mysqldump в моей функции, но я не смог создать файл aaadumpdb.sql. Мой код ниже:Как запустить команду mysqldump в java-коде?

@Test 
public void dumpDB() { 
    Process p = null; 
    try { 
     Runtime runtime = Runtime.getRuntime(); 
     p = runtime 
       .exec("mysqldump -u root -padmin --add-drop-database aaa_db " 
         + "D:\\backupdenemeaaa " + "aaadumpdb.sql"); 
     // change the dbpass and dbname with your dbpass and dbname 
     int processComplete = p.waitFor(); 

     if (processComplete == 0) { 

      System.out.println("Backup created successfully!"); 

     } else { 
      JOptionPane.showMessageDialog(new JDialog(), 
        "Could not create the backup"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    File f = new File("aaadumpdb.sql"); 

    assertTrue(f.exists()); 
} 

Может ли кто-нибудь дать мне совет по этому поводу? Спасибо.

Я сделал некоторые изменения в своем коде, но когда я запустил, мой код войдет в другую структуру. В чем проблема?

Мой Editted код ниже:

@Test 
public void dumpDB() { 
    Process p = null; 
    try { 
     Runtime runtime = Runtime.getRuntime(); 
     String mysqldumpExecutable = "C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump.exe"; 
     p = runtime.exec(mysqldumpExecutable + " -uroot -padmin --add-drop-database -B aaa_db -r" + "D:\\backupdenemeaaa " + "\\aaadumpdb.sql"); 
     // change the dbpass and dbname with your dbpass and dbname 
     int processComplete = p.waitFor(); 

     if (processComplete == 0) { 

      System.out.println("Backup created successfully!"); 

     } else { 
      JOptionPane.showMessageDialog(new JDialog(), 
        "Could not create the backup"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    File f = new File("aaadumpdb.sql"); 

    assertTrue(f.exists()); 

Как я могу решить эту проблему? Спасибо.

+0

Это потому, что вы не обрабатываете выходные потоки объекта Process вскоре после его инициализации. Вам нужно обработать getErrorStream и getOutputStream, чтобы вы могли узнать, сохраняется ли какое-либо исключение в команде, которую вы хотите выполнить. И, наконец, находится ли мусор MySql в вашей переменной пути? Как JVM предполагает знать, где находится команда mysqldump! –

ответ

0

StackTrace бы реально помочь отладить , но я считаю, что вы можете проверить, находится ли «mysqldump» в вашей PATH или приложение просто не найдет исполняемый файл. Если вы не хотите возиться с вашей PATH вы можете жёстко путь к исполняемому файлу, как показано ниже:

String mysqldumpExecutable = "C:\\apps\\mysql\\mysqldump.exe"; 
runtime.exec(mysqldumpExecutable + "-u root -padmin --add-drop-database aaa_db (.....)); 

Когда вы говорите, что вы не можете создать файл, что именно это значит? Вы получаете сообщение об ошибке? Ничего не произошло? Помогите нам помочь вам.

+1

Я беру ошибку для командной строки: «p = runtime.exec (« mysqldump -u root -padmin --add-drop-database aaa_db »+« D: \\ backupdenemeaaa »+« aaadumpdb.sql »); Ошибка: «java.io.IOException: не удается запустить программу« mysqldump »: CreateProcess error = 2, система не может найти указанный файл« – selentoptas

+0

OK, что было простой проблемой пути, и я вижу, что вы теперь жестко закодировали путь mysqldump в ваш код. Проверяя javadoc для Process.waitFor(), он говорит, что когда он возвращает 0, это означает, что приложение работает гладко и закончено правильно, оно возвращает что-то еще, когда что-то идет не так. Это означает, что mysqldump вызывается из вашего приложения, но приводит к ошибке. Я рекомендую вам проверить параметры, которые вы используете, для вызова mysqldump. Это больше не проблема Java. Совет. Сначала попробуйте запустить mysqldump из приглашения, а затем соответствующий код. –

+0

Я проверил команду mysqldump и исправил ошибку. Спасибо за помощь. – selentoptas

1

Добавьте ниже фрагмент кода, чтобы найти то, что именно происходит

try 
     { 
      InputStreamReader isr = new InputStreamReader(process.getErrorStream()); 
      BufferedReader br = new BufferedReader(isr,4094); 
      String line=null; 
      while ((line = br.readLine()) != null) 
       System.out.println(type + "> " + line);  
      } catch (IOException ioe) 
       { 
       ioe.printStackTrace(); 
       } 
    } 

Вы будете в курсе исключений и ошибок, которые могут возникнуть в том, что выполнение процесса