这是我在做一个小实验遇到的情况。
连接Access数据库用的是ucanaccess驱动,添加了所需的连接jar包后就可以连接上。
由于我记得JDK 7 之后就不用显式加载JDBC驱动,因此在java源代码中就没有显式加载,具体代码如下:
String url = "jdbc:ucanaccess://./university_A5.accdb";
Connection connection = DriverManager.getConnection(url)
然后就可以通过connection执行SQL语句了。
但打包成jar包运行的时候显示
An error occurred during login: No suitable driver found for jdbc:ucanaccess://xxxx.accdb
也是查阅了很多资料,包括打包jar的时候添加源项目用到的驱动jar包,或者运行jar包的时候添加所需jar包的类路径classpath,抑或是在MANIFEST.MF添加classpath,但还是出现上述报错。
查询了gpt,其给出了一种错误原因和解决思路:
JDBC 驱动路径:当你在 IDE 中运行程序时,IDE 会自动加载所需的驱动,而打包成 JAR 后,需要确保 JDBC 驱动能够被找到。可以在代码中显式地加载驱动:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
因此代码修改为:
String url = "jdbc:ucanaccess://./university_A5.accdb";
// 显式加载 JDBC 驱动
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
System.out.println("Driver loaded successfully.");
} catch (ClassNotFoundException e) {
e.printStackTrace();
// 或者处理驱动未找到的情况
}
Connection connection = DriverManager.getConnection(url)
也就是强制显式加载驱动。
重新打包成jar包后可以正常运行。花费了一两天时间找bug,还是IDE太先进了呀hhhh。。。