JDBC连接MySQL报错No suitable driver found,求助解决方法
解决JDBC连接MySQL时"No suitable driver found"的问题
我一眼就瞅到了核心问题——你的JDBC URL格式写错了!这绝对是导致报错的首要原因,咱们一步步来解决:
1. 紧急修正JDBC URL的格式错误
你当前的URL是:
String url = "jdbc:mysql//localhost:3306/sakila";
注意看,mysql和//之间少了一个冒号!正确的JDBC URL格式必须是jdbc:mysql://主机:端口/数据库名,所以修正后的URL应该是:
String url = "jdbc:mysql://localhost:3306/sakila?useSSL=false&serverTimezone=UTC";
额外加上useSSL=false可以避免SSL连接警告,serverTimezone=UTC是MySQL 8.0+版本的必填参数,用来解决时区不匹配的问题。
2. 确认驱动类与MySQL版本匹配
如果你的MySQL服务器是8.0及以上版本,建议使用新版驱动类com.mysql.cj.jdbc.Driver,而不是旧版的com.mysql.jdbc.Driver(旧版虽然能兼容,但新版更适配)。如果是MySQL 5.x版本,继续用旧版驱动类就行。
3. 检查Maven依赖的正确性
确保pom.xml里的驱动依赖版本和你的MySQL服务器版本对应:
- 对于MySQL 8.0+,用这个依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 可以换成最新的8.x版本 --> </dependency>
- 对于MySQL 5.x,用5.x的驱动版本,比如:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>
添加依赖后记得刷新Maven,确保jar包被正确引入。
4. 修复资源关闭的潜在bug
你的finally块直接调用dbCon.close()这些方法,如果连接失败导致对象为空,会抛出空指针异常。建议改成带空判断的关闭逻辑:
finally { try { if (rs != null) rs.close(); if (st != null) st.close(); if (dbCon != null) dbCon.close(); } catch (SQLException e) { e.printStackTrace(); } }
或者更推荐用Java 7+的try-with-resources语法,它会自动实现资源的关闭,代码更简洁安全:
public class FilmLength { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/sakila?useSSL=false&serverTimezone=UTC"; String username = "devuser"; String password = "Demo@123"; String query = "select * from film "; try (Connection dbCon = DriverManager.getConnection(url,username,password); PreparedStatement st = dbCon.prepareStatement(query); ResultSet rs = st.executeQuery()) { while(rs.next()) { String title = rs.getString(1); System.out.println(title); } } catch (Exception e) { e.printStackTrace(); } } }
先把URL的冒号问题解决,这是最直接的错误,然后再依次检查驱动类和依赖版本,最后优化资源关闭的代码,应该就能顺利连接上数据库了!
内容的提问来源于stack exchange,提问作者Mukund Madhav
相关产品推荐
相关产品推荐

