2017-10-21 201 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 Server數據庫的Java Swing應用程序,現在我想提供備份和我的Java Swing應用程序,它是一個按鈕,點擊恢復選項。在我的Java數據庫備份代碼中的錯誤

它應該備份數據庫和恢復數據庫的任何可能性,這是我的備份代碼。但是當我總是運行這個代碼(Processcomplete == 2)這段代碼中的錯誤是什麼?

+3

使用'getErrorStream()'從進程讀取錯誤 –

回答

1

您的代碼中存在許多問題。我會盡力解釋他們。但是,第一個是我看到返回錯誤代碼2.

文件名不能包含像/特殊字符的最大的錯誤。

我在代碼中看到的一個主要問題是您試圖保存的文件名。 Windows不允許輸入/\作爲文件名。因此,將YYYY/MM/DD添加到文件名不是一個好主意。每天

只有一個備份文件中加入只有日期試圖讓多個備份在同一天時,你可以每天創建相同的文件將被替換隻有一個備份文件。使用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

文件名是問題所在。豎起大拇指! –