学习JDBC遇到的一些问题

本文详细解析了MySQL数据库版本与驱动的兼容性问题,包括如何避免因版本不匹配导致的异常。同时,针对MySQL 8.0及以上版本,介绍了驱动加载的新写法与必要的参数设置,如关闭SSL连接和时区设置,确保数据库连接稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 数据库版本与驱动对应问题

参考官方文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html

具体详情还需查看官方文档。

Connector/J versionJDBC versionMySQL Server versionJRE SupportedJDK Required for CompilationStatus
8.04.25.6, 5.7, 8.01.8.x1.8.xGeneral availability. Recommended version.
5.13.0, 4.0, 4.1, 4.25.6*, 5.7*, 8.0*1.5.x, 1.6.x, 1.7.x, 1.8.x*1.5.x and 1.8.xGeneral availability

注意:如果数据库版本与驱动不一致则会报java.sql.SQLNonTransientConnectionException异常。

另附大佬博文:https://blog.csdn.net/jungle_rao/article/details/81274720

2. 高版本(MySQL 8.0 以上版本)驱动加载写法区别与一些必须设置的参数

  • com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver
  • MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭。
  • 最后还需要设置 CST(时区)。

大佬示例:

Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?useSSL=false&serverTimezone=UTC","root","password");

补充:在 JDBC4.0 之前,连接数据库的时候,通常会用 Class.forName(“com.mysql.jdbc.Driver”)
这句先加载数据库相关的驱动,然后再进行获取连接等的操作。而 JDBC4.0 之后不需要 Class.forName
来加载驱动,直接获取连接即可,这里使用了 Java 的SPI扩展机制来实现。
附:https://www.jianshu.com/p/46b42f7f593c

另附一篇关于时区的博文:https://www.jianshu.com/p/735e8444cdda
大神教程:https://www.runoob.com/java/java-mysql-connect.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员杰森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值