【问题标题】:An Error in my java database backup code我的 java 数据库备份代码中的错误
【发布时间】:2017-10-21 16:45:27
【问题描述】:
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)这段代码有什么错误?

【问题讨论】:

  • 使用getErrorStream()从进程中读取错误

标签: java swing backup database-restore


【解决方案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);

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

【讨论】:

  • 文件名是问题所在。竖起大拇指!
猜你喜欢
  • 2014-08-14
  • 2012-05-19
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多