我想在我開發的一個我的桌面應用程序之一添加一個「創建備份」選項。我已經搜尋了很多關於這方面的信息,並找到了解決這個問題的一些方法,但是它們都破壞了一個重要的概念「可移植性」。許多人建議使用mysqldump.exe(在Windows中)來做到這一點,但我想我需要知道mysql安裝文件夾才能採取這種方法。以下是推薦的代碼的方式未能正常運行(我不知道爲什麼,請告訴我,如果你發現真正的原因)備份mysql數據庫而不會丟失與java的可移植性
private static String dbName = "shams";
private static String dbUserName = "root";
private static String dbPassword = "";
public static boolean backupDB(File file) {
String path = file.getPath();
if (!path.contains(".sql")) {
file = new File(path +".sql");
}
String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file.getPath();
Process runtimeProcess;
try {
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) {
System.out.println("Backup created successfully");
runtimeProcess.destroy();
return true;
} else {
System.out.println("Could not create the backup");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
和一些建議簡單地將數據庫複製到某個位置。
so ...我應該怎樣做才能以一種整潔的方式?任何第三方jar可用?
--edit ---
與給定的代碼問題是,當你沒有一個用戶的密碼(在這種情況下,root用戶),您不應該提及您的命令的密碼。該命令應該是這樣的:String executeCmd = "mysqldump -u " + dbUserName + " --add-drop-database -B " + dbName + " -r " + file.getPath();
並且您也不需要指定mysql安裝文件夾。上面的代碼按原樣運行。
你是什麼意思「破壞可移植性」?你看到了哪些例子,它們是如何「破壞可移植性」的? – Nanne
我已經提到了示例代碼。你可以看到我們需要知道mysql的安裝文件夾才能執行mysqldump命令。 「知道安裝文件夾」意味着失去可移植性。 – MoienGK
你可以這麼說。 (或者我應該說「你是這麼說的?」)。但是,如果你對'個人'mysql服務器運行這個服務器,你需要安裝它,所以它只是安裝的一部分:確保安裝程序檢查mysql並搜索/詢問mysqldump命令的位置? – Nanne