我正在开发一个Java桌面应用程序,它将在同一主机上使用MySQL
DB。如何在启动应用程序后立即检查是否在该主机上安装了MySQL?
我可以确定DriverManager#getConnection()
不会抛出异常,但它不会告诉我MySQL
是否已安装。 DriverManager#getConnection()
可能会在URL不正确(包括错误的端口号)或用户/密码不匹配等情况下抛出异常。
答案 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;
}