问题描述
在测试类中可以通过DriverManager正常获取到Connection对象并且可以正常访问和操作数据库但是运行Tomcat时获取Connection对象时则会抛出java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/~
问题分析
- 抛出的问题是无法找到数据库驱动包
- 但实际上驱动是导入成功的,因为Junit进行测试时可以完成
- 说明是运行Tomcat后没有找到驱动包
解决方案
- 主动完成注册驱动这一步,注意不同版本的驱动名称有所区别
Class.forName("com.mysql.cj.jdbc.Driver");
- 在mysql5之后的驱动jar包可以省略注册驱动的步骤
- 因为在mysql-connector-java包下的\META-INF\services\java.sql.Driver文件指定了驱动的名称
com.mysql.cj.jdbc.Driver
- 理论上在包导入后会自动完成驱动注册
public static Connection getConnection() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/one_lb", "root", "12345678");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
分析原因
猜测和类的加载机制有关,暂时还不是很清楚,后续研究一下补充上来,欢迎大佬指导,说说原因