2011-12-09 1 views
0

MySQLに付属のmysqldumpユーティリティを使用してMySQLデータベースをバックアップしようとしていますか?私のコードはJAVAにあります。しかし、何も返されないので、私はデータベースをバックアップできません。javaでmysqldump.exeと統合できません

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(); 
} 

最後にループにアクセスすることはできません。だからここで何が問題なの?

+0

'最後にループにアクセスできません。 ' –

+0

ループにまったくアクセスできません。 – Hatem

+0

* Process *のexitValueをチェックすると、何が得られますか?また、コマンド配列を印刷して、実際にそれが必要と考えるものを保持していることを確認しましたか? –

答えて

0

また、あなたのいずれかのプロセスを開始する前に

pb.redirectErrorStream(true); 

を使用して読み取りまたは出力ストリームにマージする必要があり、エラー・ストリーム上のデータを持っています。

+0

Thanx。しかし、これは私の問題を解決しない:( – Hatem

+0

@Hatemしかし、それはあなたに何が間違っているかの表示をしましたか?(データを受け取ったときにデータを印刷すると) –

+0

dumpdata.toString()は空文字列として返されます。通常の状態では空です。 – Hatem

関連する問題