2017-10-21 188 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

文件名是问题所在。竖起大拇指! –