簡體   English   中英

Java:如何檢查Windows是否已安裝MySQL?

[英]Java: How to check if MySQL is installed or not on Windows?

我正在開發一個Java桌面應用程序,它將在同一主機上使用MySQL DB。 啟動應用程序后,如何檢查該主機上是否已安裝MySQL?

我可以肯定地檢查DriverManager#getConnection()不會引發異常,但是它不能告訴您是否已安裝MySQL 在URL不正確(包括錯誤的端口號)或用戶/密碼不匹配等情況下, DriverManager#getConnection()可能引發異常。

我通過檢查是否安裝了服務來做到這一點。

即使該服務未運行,它也為我工作。

private static boolean mysqlServiceExists() throws IOException {
    Process p = Runtime.getRuntime().exec("sc query");
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        if (line.trim().startsWith("SERVICE_NAME: mysql")) {
            return true;
        }
    }
    return false;
}

通常,桌面應用程序安裝過程的一部分包括為任何必需的DBMS操作編寫連接字符串。

這些連接字符串包括DBMS主機名,憑據(用戶名/密碼)以及可能的數據庫名稱。 如果需要安全通信(TLS / SSL),他們會提到。

要解決問題,請在軟件包中創建默認連接字符串。 在安裝和/或啟動桌面應用程序的過程中,您嘗試使用它進行連接。 如果連接成功,那就很好。

這樣的連接字符串可能是

     jdbc:mysql://localhost/nimish?user=defaultuser&password=secretsecret

這將使用憑據defaultuser / secretsecret連接到用戶計算機上名為“ nimish”的數據庫。

如果連接失敗,通常可以從錯誤消息中找出問題所在。 連接請求是否立即被拒絕? 如果是這樣,則說明MySQL服務器未安裝或未運行。 服務器響應是否超時? 在這種情況下,MySQL服務器有問題。 您是否收到憑證拒絕(密碼錯誤等)? 如果是這樣,您就知道是問題所在。

在這種情況下,您的應用程序會彈出一個對話框,提示您提供適當的友好用戶體驗,

用戶! 此連接字符串不起作用。 想給我一個嗎?

必要時,對話框可以說明諸如“必須確保MySQL正在運行”之類的內容。 它可以要求輸入新密碼,並執行對您的用戶有意義的任何操作。

如果事實證明這很有用,則這為您的應用程序提供了一種在另一台計算機上使用DBMS的方法。 在這種情況下,您的對話框會顯示“您的系統管理員可以為您提供此信息”。

您可以編寫一個單獨的,簡單的,故障排除的應用程序,該程序將在用戶的文件系統周圍進行查找,以查找MySQL和其他必備軟件,並在端口3306沒有響應時宣布“ MySQL似乎未在運行”之類的信息。 它可以宣布“我找不到MySQL服務器軟件可執行文件”,但這很難,因為隨着軟件安裝方式的發展,情況會隨着時間而改變。

請注意 :如果您知道數據庫將始終是本地數據庫,則應使用sqlite代替MySQL進行調查。 它不需要服務器,因此更易於安裝和配置。 通常,使用MySQL之類的DBMS的目的是允許多個用戶共享同一組數據。 因此,您需要靈活配置連接字符串。

暫無
暫無

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

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