JDBC 系列写到第 04 篇,我默认你已经能独立写出一个从 Connection、PreparedStatement 到 ResultSet 的完整 DAO 了。如果前面的篇目你是跳着看的,那也没关系,这一篇的每一块都能单独当排查手册来用。
这篇文章主要聊五个在真实项目里被反复问到、反复踩的细节点:MySQL 驱动到底去哪下载、哪个版本合适、连接串参数是什么意思;批量插入怎么从一条一条插变成真正的批量写;Flink 的 JDBC 连接器在长时间运行时为什么容易报连接异常;DBeaver 开源版怎么用 JDBC 连上 MongoDB;以及一个非常常见的报错 name jdbc is not bound in this context 到底在说什么。我尽量把"为什么会这样"讲清楚,再给可直接照搬的解决办法。
1. MySQL JDBC 驱动下载与版本匹配:先解决"连不上"的第一道坎
1.1 官方下载渠道与 Maven 坐标
不推荐从第三方网站下载驱动压缩包,渠道乱七八糟很容易下到带广告捆绑的版本。第一选择是 MySQL 官方下载页 dev.mysql.com/downloads/connector/j/,里面提供 Platform Independent 的 zip 包和 tar.gz 包;第二选择是 GitHub 上 mysql/mysql-connector-j 的 Releases 页面,或者直接用 Maven Central。如果项目是 Maven 或 Gradle 管理,最省事的做法是直接声明坐标:
xml复制<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
注意 artifactId 从 8.x 开始变成了 mysql-connector-j,早期版本是 mysql-connector-java。老项目里常见的 mysql-connector-java:5.1.49 也能继续用,但新项目我建议直接用 8.0.33 或更高版本,因为连 MySQL 8.0 服务端时,老驱动碰到认证插件问题的概率大得多。
1.2 版本对应关系与驱动类名选择
整理了一张对照表,按"服务端版本 + 推荐驱动版本 + 驱动类名"来选,这样最少踩坑:
| 服务端版本 | 推荐驱动版本 | 驱动类名 | 说明 |
|---|---|---|---|
| MySQL 5.6 / 5.7 | 5.1.49 或 8.0.x | com.mysql.jdbc.Driver / com.mysql.cj.jdbc.Driver | 8.0 驱动能连 5.x,注意时区和认证参数 |
| MySQL 8.0 | 8. |
