一、JDBC 是基础
JDBC 是 Java 官方提供的 “数据库操作标准”,规定了连接数据库、执行 SQL、处理结果的流程。但直接用 JDBC 开发,需要写大量重复代码(比如获取连接、关闭资源 )。
二、Druid 是 “连接池”:优化 JDBC 的连接管理
Druid 是 “数据库连接池”,解决 JDBC 直连的痛点:
- JDBC 每次操作都要新建
Connection
,效率低。 - Druid 预先创建一批连接,复用连接,提升性能(比如高并发时不崩 )。
角色:负责 “高效提供数据库连接”,是 JDBC 连接的 “管家”。
三、DBUtils 是 “工具类”:简化 JDBC 的编码
DBUtils 是 Apache 提供的 “JDBC 工具库”,解决 JDBC 编码繁琐的痛点:
- JDBC 执行 SQL 时,要手动处理
Statement
、ResultSet
、关闭资源。 - DBUtils 封装这些操作,用
QueryRunner
、ResultSetHandler
简化代码。
角色:负责 “简化 SQL 执行和结果处理”,是 JDBC 编码的 “捷径”。
四、三者的协同关系(流程打通)
可以把它们想象成 “数据库操作流水线”:
详细流程:
- 应用程序:需要操作数据库(比如查询用户 )。
- DBUtils:
- 用
QueryRunner
简化 SQL 执行,不用写繁琐的 JDBC 代码。 - 比如调用
runner.query(sql, new BeanListHandler<>(User.class))
。
- 用
- Druid:
QueryRunner
需要Connection
时,Druid 从连接池里复用连接(不是新建 )。- 避免了 JDBC 直连的高开销。
- JDBC:
- Druid 的
Connection
遵循 JDBC 标准,执行 SQL、处理结果。
- Druid 的
- 数据库:最终执行 SQL,返回结果。
五、对比:单独用 vs 协同用
场景 | 单独用 JDBC | 用 Druid + DBUtils |
---|---|---|
连接管理 | 每次新建 Connection ,效率低 | Druid 复用连接,提升性能 |
编码复杂度 | 手动处理 Statement 、ResultSet | DBUtils 封装操作,代码减少 50%+ |
适用场景 | 简单 Demo,学习用 | 实际项目(尤其是高并发、复杂操作 ) |
六、代码示例:协同工作流程
假设实现 “查询用户列表” 功能,用 Druid + DBUtils 的完整代码:
// 1. 配置 Druid 数据源(提前初始化好,比如用配置文件)
DataSource dataSource = ...; // 从 Druid 连接池获取
// 2. 创建 QueryRunner(DBUtils 的核心类,传入 Druid 的数据源)
QueryRunner runner = new QueryRunner(dataSource);
// 3. 执行查询(DBUtils 简化 SQL 执行)
String sql = "select * from user";
try {
// 用 BeanListHandler 把结果转成 User 列表(DBUtils 简化结果处理)
List<User> userList = runner.query(sql, new BeanListHandler<>(User.class));
// 直接拿到结果,不用手动遍历 ResultSet
System.out.println("用户列表:" + userList);
} catch (SQLException e) {
e.printStackTrace();
}
- Druid 的作用:
dataSource
提供的Connection
是复用的,提升效率。 - DBUtils 的作用:
QueryRunner
简化了 SQL 执行,BeanListHandler
自动把结果转成 User 列表。
一句话总结
JDBC 是基础标准,Druid 优化连接管理(复用连接 ),DBUtils 优化编码流程(简化 SQL 执行和结果处理 )。三者协同,让数据库操作更高效、更简洁,是实际项目中常用的组合~