2017-10-21 9 views
1
import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.JFileChooser; 
import javax.swing.JOptionPane; 

public class Backup extends javax.swing.JFrame { 

    String path = null; 
    String filename; 

    public Backup() { 
     initComponents(); 

     setLocationRelativeTo(null); 
    } 

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { 
     JFileChooser fc = new JFileChooser(); 
     fc.showOpenDialog(this); 
     String date = new SimpleDateFormat("YYYY/MM/dd").format(new Date()); 
     try { 
      File f = fc.getSelectedFile(); 
      path = f.getAbsolutePath(); 
      path = path.replace("\\", "/"); 
      path = path + " _ " + date + ".sql"; 
      jTextField5.setText(path); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     Process p; 
     try { 
      Runtime runtime = Runtime.getRuntime(); 
      p = runtime.exec("C:/Program Files/MySQL/MySQL Server5.1/bin/mysqldump.exe -u root -p123 --add-drop-database -B tsms -r" + path); 
      int Processcomplete = p.waitFor(); 
      System.out.println(p); 
      System.out.println("" + Processcomplete); 
      if (Processcomplete == 0) { 
       JOptionPane.showMessageDialog(rootPane, "Database Backup Successfully"); 
      } else { 
       JOptionPane.showMessageDialog(rootPane, "Error"); 
      } 
      jTextField5.setText(null); 
      System.gc(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.gc(); 
     } 
    } 
} 

私はMySQLサーバーデータベースを使用してJava Swingアプリケーションを開発しましたが、ボタンをクリックしてJava Swingアプリケーションにバックアップとリストアのオプションを提供したいと考えています。マイ・データベースのバックアップ・コードにエラーがあります

データベースをバックアップし、データベースを復元する必要があります。これは私のバックアップコードです。しかし、このコードを常に実行すると、(Processcomplete == 2)このコードのエラーは何ですか?

+3

プロセスからエラーを読み取るために 'getErrorStream()'を使用してください –

答えて

1

コードには多くの問題があります。私はそれらをすべて説明しようとします。しかし、最初のものは、私は2

ファイル名が/などの特殊文字を含めることはできませんエラーコードを返すために見る最大の過ちです。

あなたのコードに表示される大きな問題の1つは、保存しようとしているファイル名です。 Windowsでは/または\をファイル名として入力できません。だから、YYYY/MM/DDをファイル名に追加するのは良い考えではありません。一日あたりの

一つだけのバックアップファイル

同じ日に複数のバックアップを取得しようとしたときに同じファイル、1日に1回だけバックアップファイルを作成することができます日付のみが置き換えられます追加することにより、 。 getTime()util.Dateオブジェクトを使用して、ミリ秒ごとにリフレッシュされる一意の番号を取得します。

この部分を交換します。

try { 
    File f = fc.getSelectedFile(); 
    path = f.getAbsolutePath(); 
    path = path.replace("\\", "/"); 
    path = path + " _ " + new Date().getTime() + ".sql"; 
    jTextField5.setText(path); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

上記の両方の問題がこれによって解決されます。別のコンピュータにそれが変更される可能性がありますのでmysqldump.exeの絶対パスを与える

悪い考えです。 C:/Program Files/MySQL/MySQL Server5.1/bin/mysqldump.exeをパスとして指定し、代わりにMySQLをインストールした後に環境変数として追加して、mysqldump.exeを使用してください。

p = runtime.exec("mysqldump.exe -u root -p123 --add-drop-database -B tsms -r" + path); 

ファイルの命名部分が問題だった、それが機能するようになりました。

+0

ファイル名が問題でした。いいぞ! –

関連する問題