Java JDBC 数据库增删改查工具类(含多库分页支持)

Ruby
Ruby
发布时间:2026-10-14 | 4人浏览过
原创

在Java开发中,频繁编写JDBC代码容易带来样板代码冗余问题。该工具类封装了连接管理、参数绑定及结果集映射功能,通过正则表达式从SQL语句中提取列名以适配实体类属性,并针对不同数据库实现了差异化的分页SQL拼接逻辑,有效提升了DAO层的开发效率。

核心功能与特性

本工具类 DBUtil 主要解决以下痛点:

  • 防SQL注入:所有执行方法均强制使用 PreparedStatement 进行参数绑定。
  • 自动类型映射:通过反射将 ResultSet 中的数据自动填充至Java Bean对象中,支持自定义字段映射注解。
  • 多库兼容:根据当前连接的Driver类型,自动追加相应的分页语法(MySQL使用 LIMIT,Oracle使用 ROWNUM,PostgreSQL使用 OFFSET/LIMIT)。

准备条件

在使用前,请确保项目环境中已包含对应的数据库驱动依赖。代码默认配置了 PostgreSQL 的连接信息,实际使用时需替换为对应数据库的配置。

private static String url = "jdbc:postgresql://192.168.56.101/db";
private static String user = "test";
private static String password = "12345678";

若需切换至其他数据库,请修改 static 块中的 Class.forName() 参数及上述连接常量。

真实操作顺序

第1步:执行插入操作 (Insert)

目的:向数据库表中添加新记录。

入口:调用 insert(String sql, Object... param) 或 insert(String sql, T t)。

动作说明:

  1. 建立数据库连接 getConnection()。
  2. 创建预编译语句 conn.prepareStatement(sql)。
  3. 若传入实体对象 t,则调用 getColumnsFromInsert 解析SQL列名,并通过反射获取实体属性值绑定参数。
  4. 若直接传入可变参数 param,则按顺序绑定。
  5. 执行 executeUpdate() 并返回影响行数。

第2步:执行更新操作 (Update)

目的:修改数据库表中的现有记录。

入口:调用 update(String sql, Object... param)。

动作说明:

  1. 复用连接管理机制。
  2. 若传入实体对象,调用 getColumnsFromUpdate 提取 SET 和 WHERE 子句中的字段名,并绑定实体对应属性值。
  3. 执行 executeUpdate()。

第3步:执行查询操作 (Query)

目的:获取单条或多条数据记录并转换为对象列表。

入口:querySingular(查单个)、queryPlural(查列表)或 queryPluralForPagging(分页查)。

动作说明:

  1. 对于分页查询,内部调用 addPagingSQL 根据Driver类型拼接 LIMIT/OFFSET 或 ROWNUM 逻辑。
  2. 构建 PreparedStatement 并绑定参数。
  3. 遍历 ResultSet,利用 instance() 方法通过反射将每行数据映射为目标 Class <T> 的对象。
  4. 注意:映射时优先匹配实体类中与SQL列名一致的字段名;若不一致,可结合自定义的 @Column 注解进行匹配。

第4步:统计数据量

目的:快速获取符合查询条件的总记录数,无需加载全量数据。

入口:queryDataCount(String sql, Object... param)。

动作说明:

  1. 内部调用 addCountSQL 将原SQL包裹在 SELECT COUNT(*) as dataCount FROM ( ... ) a 结构中。
  2. 执行查询并返回 dataCount 字段的整数值。

完成判断与排错

完成状态:方法成功返回整数影响行数、对象实例或 List 集合,且 finally 块正确关闭了 Statement、ResultSet 和 Connection,未发生资源泄露。

常见排错:

  • 列名不匹配:若实体类字段名与数据库列名不一致导致结果为null,请检查是否使用了 @Column(name="db_column") 注解,或确认SQL查询出的别名是否正确。
  • 驱动加载失败:报错 NoClassDefFoundError 或 ClassNotFoundException 时,请检查 maven/gradle 依赖是否引入完整,并核对 Class.forName() 中的驱动类名是否与当前使用的数据库版本一致(如 MySQL 新版驱动可能是 com.mysql.cj.jdbc.Driver)。
  • 分页异常:Oracle 分页逻辑依赖于子查询别名,若原始 SQL 结构复杂导致正则解析列名失败,可能需要手动调整 addPagingSQL 中的正则表达式。

总结

以上就是基于JDBC实现Java数据库增删改查及分页功能的详细内容。该工具类通过封装底层的驱动管理和反射映射,简化了持久层开发的复杂度,适用于快速原型开发或非重型ORM场景。更多关于Java数据库优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表