1 JDBC 简介
Java数据库连接(JDBC)API 提供了来自 Java 的通用数据访问。该 API 包含一个框架,可以动态安装不同的驱动程序来访问不同的数据源。JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
JDBC API由两个包组成:
- java.sql:核心 API
- javax.sql:可选 API,对 java.sql 的补充
JDBC帮助管理以下三步骤:
- 连接数据源,如:数据库。
- 为数据库传递查询和更新指令
- 处理数据库响应并返回的结果。
简单示例:
public void connectToAndQueryDatabase(String username, String password) {
Connection con = DriverManager.getConnection(
"jdbc:myDriver:myDatabase",
username,
password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
}
2 JDBC 驱动程序类型
JDBC 规范将驱动程序分为四类:
- 第一类:将 JDBC 翻译为 ODBC。
使用 ODBC 驱动与数据库通信。Java 8 已不再支持。 - 第二类:部分 Java 程序和部分本地代码。
既需安装 Java 又需要安装第三方。 - 第三类:纯 Java 客户端类库。
使用数据库无关协议,将数据库请求发送给服务器,服务器再翻译为数据库相关协议。简化部署,平台相关代码只在服务端。 - 第四类:纯 Java 类库。
将 JDBC 请求直接翻译成数据库相关协议。
大部分数据库供应商提供第三或第四类驱动。
3 JDBC 的典型用法
JDBC API 支持两层和三层处理模型进行数据库访问
双层模型
传统 C/S 模型中,服务器部署数据库,客户端安装 GUI 程序,JDBC 驱动部署在客户端,直接与数据源通信。
三层模型
如今三层模型更常见。客户端不直接调用数据库,调用中间件层,由中间件层操作数据库。
可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
4 JDBC 最佳实践
- 数据库资源是非常昂贵的,用完了应该尽快关闭它。Connection, Statement, ResultSet 等 JDBC 对象都有 close 方法,调用它就好了。
- 养成在代码中显式关闭掉 ResultSet,Statement,Connection 的习惯,如果你用的是连接池的话,连接用完后会放回池里,但是没有关闭的 ResultSet 和 Statement 就会造成资源泄漏了。
- 在 finally 块中关闭资源,保证即便出了异常也能正常关闭。
- 大量类似的查询应当使用批处理完成。
- 尽量使用 PreparedStatement 而不是 Statement,以避免 SQL 注入,同时还能通过预编译和缓存机制提升执行的效率。
- 如果你要将大量数据读入到 ResultSet 中,应该合理的设置 fetchSize 以便提升性能。
- 你用的数据库可能没有支持所有的隔离级别,用之前先仔细确认下。
- 数据库隔离级别越高性能越差,确保你的数据库连接设置的隔离级别是最优的。
- 如果在 WEB 程序中创建数据库连接,最好通过 JNDI 使用 JDBC 的数据源,这样可以对连接进行重用。
- 如果你需要长时间对 ResultSet 进行操作的话,尽量使用离线的 RowSet。