Java:如何检查Windows上是否安装了MySQL?

时间:2017-05-25 10:22:55

标签: java mysql

我正在开发一个Java桌面应用程序,它将在同一主机上使用MySQL DB。如何在启动应用程序后立即检查是否在该主机上安装了MySQL?

我可以确定DriverManager#getConnection()不会抛出异常,但它不会告诉我MySQL是否已安装。 DriverManager#getConnection()可能会在URL不正确(包括错误的端口号)或用户/密码不匹配等情况下抛出异常。

2 个答案:

答案 0 :(得分:0)

通常,桌面应用程序的部分安装过程包括为任何所需的DBMS操作编写连接字符串。

这些连接字符串包括DBMS主机名,凭据(用户名/密码)以及可能的数据库名称。如果需要安全通信(TLS / SSL),他们会提到这一点。

要解决问题中的问题,请在软件包中创建默认连接字符串。在安装和/或启动桌面应用程序的过程中,您尝试使用它进行连接。如果你的连接成功,那就好了。

这样的连接字符串可能是

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

连接到用户计算机上的数据库,称为" nimish"凭证凭证defaultuser / secretsecret。

如果您的连接失败,您通常可以从错误消息中判断出错了什么。连接请求是否立即被拒绝?如果是这样,MySQL服务器未安装或未运行。服务器响应时间了吗?在这种情况下,MySQL服务器有问题。您是否获得了凭据拒绝(密码错误等)?如果是这样,你知道问题就在发生。

在这些情况下,您的应用程序弹出一个对话框,说明提供适当友好的用户体验,

  

哟!用户!这个连接字符串不起作用。想给我一个吗?

你的对话框可以解释类似的事情,"你必须确保MySQL正在运行"如有必要。它可以要求输入新密码,并对用户做任何有意义的事情。

这使您的应用程序可以在另一台计算机上使用DBMS,如果这样做有用的话。在这种情况下,您的对话框可以说"您的系统管理员可以为您提供此信息。"

您可以编写一个单独的,简单的故障排除应用程序,该应用程序将查看用户的文件系统,试图找到MySQL和其他必备软件,并宣布以下内容:" MySQL似乎没有跑步"当端口3306没有响应时。它可以宣布"我找不到MySQL服务器软件的可执行文件"但这是 hard ,因为软件的安装方式会随着时间的推移而发生变化。

请注意:如果知道您的数据库始终是本地的,您应该使用sqlite代替MySQL进行调查。它不需要服务器,因此更容易安装和配置。通常,使用像MySQL这样的DBMS的目的是允许多个用户共享相同的数据集。因此,您需要灵活配置连接字符串。

答案 1 :(得分:0)

我通过检查是否安装了服务来做到这一点。

即使该服务未运行,它也为我工作。

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