簡體   English   中英

JAVA中的備份需要太多時間才能執行

[英]Back-up in JAVA takes too much time to execute

因此,我想為我的mysql數據庫創建一個備份文件。

但是,當我嘗試運行代碼時,它花費了太多時間,仍然沒有響應。

這是我的代碼:

public void backup() {
    String fileName = "";
    URL url;

    JFileChooser backupFile = new JFileChooser();

    backupFile.setCurrentDirectory(new java.io.File("."));
    backupFile.setDialogTitle("Select the Path of Backup");
    backupFile.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    backupFile.setAcceptAllFileFilterUsed(false);
    backupFile.setApproveButtonText("Backup Database");
    backupFile.setSize(700, 400);
    backupFile.setLocation(100, 100);

    if (backupFile.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
        try {
            url = backupFile.getSelectedFile().toURL();
            fileName = url.toString().replaceAll("file:/", "").trim();
            System.out.println(fileName);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("No Selection");
    }

    try {

        String dbName = AppVars.dbName;
        String dbUser = AppVars.dbUserName;
        String dbPass = AppVars.dbPassword;
        if (!fileName.equals("") && fileName != null) {
            String savePath = fileName + "ssmis.sql";
            String executeCmd = AppVars.xamppUrl + "mysqldump -u " + dbUser + " -p " + dbPass + " --database " + dbName + " -r " + savePath;

            System.out.println(executeCmd);
            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            System.out.println("Here");

            if (processComplete == 0) {
                JOptionPane.showMessageDialog(null, "Backup Successful", "Success", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null, "Backup Failed", "Failed", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(null, "Error at Backup " + ex);
    }

}

我究竟做錯了什么?

我不確定是否可以在mysql中單獨備份所有表,但是如果可以創建一個多線程應用程序,它將從所有表中備份,它們將為每個表分別創建備份文件您可以從您的代碼合並。 在每個線程中使用倒數鎖存器 線程處理完成后,您可以合並文件。

如果您在事件偵聽器中運行此代碼,它將凍結GUI,直到備份完成。 您需要在單獨的線程中運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM