我的java数据库备份代码出错

时间:2017-10-21 16:45:28

标签: java swing backup database-restore

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)这段代码中的错误是什么?

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多问题。我试着解释一下。但第一个是我看到的最大错误,它返回错误代码2。

  

文件名不能包含/ 等特殊字符。

我在您的代码中看到的一个主要问题是您要保存的文件名。 Windows不允许将/\作为文件名输入。因此,将YYYY/MM/DD添加到文件名不是一个好主意。

  

每天只有一个备份文件

通过仅添加日期,您每天只能创建一个备份文件,在同一天尝试获取多个备份时,将替换相同的文件。使用util.Date对象的getTime()来获取每毫秒刷新的唯一数字。

替换此部分;

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

文件命名部分是问题,现在应该可以正常工作。