JDBC 是 Java Database Connectivity 的缩写,是 Java 应用程序的 API,用于访问数据库。1997年2月19日发布的 JDK 1.1 版本中就已经包含了 JDBC 的实现,从 JDBC 3.0 版本开始,JDBC 在 JCP (Java Community Process) 机制下进行迭代开发。在 JSR 54 中有关于 JDBC 简短的底层技术描述:JDBC is a Java API for executing SQL statements
JDBC 历史版本
JDBC 由 Oracle Corporation 开发,发布至今已经有 26 年的历史,代码分布在 java.sql 和 javax.sql 包中。目前 JDBC 的最新版本是 4.3,发布于 2017 年。下面是 JDBC 发布历史时间表,以及对应的 JDK 实现
Year | JDBC Version | JSR | JDK Version |
---|---|---|---|
2017 | JDBC 4.3 | JSR 221 - release 3 | Java SE 9 |
2014 | JDBC 4.2 | JSR 221 - release 2 | Java SE 8 |
2011 | JDBC 4.1 | JSR 221 - release 1 | Java SE 7 |
2006 | JDBC 4.0 | JSR 221 | Java SE 6 |
2004 | JDBC RowSet Implementrations | JSR 114 | J2SE 1.5 |
2000 | JDBC 3.0 | JSR 54 | J2SE 1.4 |
1998 | JDBC 2.x | - | J2SE 1.2 / J2SE 1.3 |
1997 | JDBC 1.2 | - | JDK 1.1 |
JDBC 版本特性
JDBC 3.0 将不同的 JDBC 2.x 版本规范合并,并开始在 JSR 下迭代开发,JDBC 3.0 主要目标是技术功能完善,JDBC 4.0 主要目标是提供更好的开发体验
JDBC 驱动
JDBC 4.0 支持 自动加载驱动,3.0 需要指定驱动加载
1 | // 3.0 |
JDBC 4.x 新特性
JDBC Version | New Feature |
---|---|
4.0 | 支持驱动自动加载 |
4.1 | 支持 try-with-resource |
4.2 | 支持 REF CURSOR |
4.3 | 支持 Sharding |
JDBC 驱动类型
JDBC 驱动类型主要有以下四种
JDBC Driver | 类别 |
---|---|
Type 1 | JDBC-ODBC bridge |
Type 2 | Native-API driver |
Type 3 | Middleware driver |
Type 4 | Database-Protocol driver |
可以发现 Type 4 类型的驱动性能应该是最好的,mysql-connector-j 的驱动类型属于 Type 4 driver
JDBC 核心 API
- DataSource 代表实际连接的数据库
- Connection 数据库连接可以通过 DataSource 对象获取,用于执行 Statement 和 获取 ResultSet
- Statement 可以通过 Connection 对象获取,用于执行 SQL 语句
- PrepareStatement 可以预编译 SQL 语句,防止 SQL 注入
- ResultSet 代表数据执行的查询结果
1 | // 简单代码事例 |
Vendor Driver
主流数据库几乎都提供了对应的 JDBC Driver,比如 Hive 的 hive-jdbc,Mysql 的 mysql-connector-j,Clickhouse 的 clickhouse-jdbc 等。JDBC 的设计完全符合 OCP、DIP 原则,扩展数据源非常方便
如果项目中有换存储方案的需求,理论上只需要更换对应的 jdbc driver 就可以了
集成
虽然 JDBC 提供了完整的访问数据库能力,但直接使用 JDBC 操作数据库,过于复杂,并且会增加过多的样板代码。在真实的项目开发中,我们会使用数据库连接池 Hikari 来提高数据库操作的吞吐量,并引入持久层框架来降低代码复杂度,比如使用:Spring JDBC Template 、MyBatis、Hibernate 等,并且基于不同场景可以选择使用不同的持久层框架,比如可以使用 JDBC Template 来进行大数据集记录的批量新增、更新(需要配置rewriteBatchedStatements=true)
HikariCP
HikariCP 是一款高性能的 JDBC 连接池
1 | // 依赖包 |
MyBatis
MyBatis 是一款流行的 ORM 框架,可以通过 Mapper 接口绑定配置 SQL 进行数据库访问
1 | // 依赖包 |
JDBC Template
JDBC Template 由 Spring 提供,可以简化 JDBC 操作
1 | // 依赖包 |