第一个可能的问题是您使用的 URL:
应该是这样的:
jdbc:mysql://[my-sql-server-ip]:3306/inventory
通常对于小型应用程序,您可以将 server-ip 和 server-port 放在 jar 文件附近的 .properties 文件中。如果您不想拥有此文件,您可以在应用程序启动时使用一个非常简单的 GUI 表单来从用户那里获取服务器 IP 和服务器端口。 (如果这不是最终用户的应用程序,请不要过分努力。只需使用 JOptionPane.ShowInputDialog(...) 获取输入,并根据用户的输入动态创建连接 URL。)
如果 server-ip 不是问题,通常第二个问题是 my-sql 的连接器 jar 文件不在应用程序的类路径中。
有两种解决方法:
- 丑陋但简单的方法:从mysql的站点下载mysql连接器的源文件并将整个源代码放入您的应用程序中,然后您可以构建一个包含连接器的Big Fatty jar文件my-sql 的类。
这不是专家的选择,因为 JDBC 的理念是:
不要将您的数据库层代码依赖于特定的数据库,当您在项目中注入 mysql 连接器的源代码时,您会与它如此耦合。此外,如果您想为您的项目更新 my-sql 连接器,您必须重新编译您的项目。这个解决方案的不足我数不过来,你可以自己阅读。
- 更好的方法是:在你的项目中放置一个清单(然后它将在你的输出 jar 文件中)来声明类路径依赖项。然后在您的输出 jar 文件附近创建一个文件夹,其中包含连接器和可能的其他项目依赖项。
例如在根文件夹中:
root-folder
+ [your output jar name].jar
+ [lib folder name]
+ mysql-connector-java-[your version].jar
以及 MANIFEST.MF 文件的条目:
Manifest-Version: 1.0
Class-Path: [lib folder name]/mysql-connector-java-[your version].jar
Main-Class: [fully qualified package and class name without .java to your main class]
例如:
Main-Class: com.staefi.main.App
哪个App.java 是启动程序的main方法的类。
另一个提示是将 MANIFEST.MF 文件放在 META-INF 文件夹内项目中 src 文件夹的根目录中。例如:
src
+ META-INF
+ MANIFEST.MF
+ [your packages start here]
最后,您可以压缩根文件夹以创建项目和依赖项的可移植输出。
另外一种方法是创建一个bat/sh文件来维护你的jar文件的类路径和执行,但是它和上面的方法非常相似。如果是你,我不会在我的输出 jar 文件中注入连接器的类。
祝你好运。