Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作

简介: Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作

文章目录


一、Apache-DBUtils简介

二、主要API的使用

1、DbUtils类

2、QueryRunner类

3、ResultSetHandler接口及实现类

三、Apache-DBUtils驱动下载


一、Apache-DBUtils简介


commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。


API介绍:


493e65c4fe28437d8c4b3b69a5e06038.png8139709e2de84b0091e4aa37b8ff8520.png



二、主要API的使用


1、DbUtils类

提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

①public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。

②public static void closeQuietly(…):这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。

③public static void commitAndClose(Connection conn)throws SQLException:用来提交连接的事务,然后关闭连接。

④public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。

⑤public static void rollback(Connection conn)throws SQLException:允许conn为null,因为方法内部做了判断。

⑥public static void rollbackAndClose(Connection conn)throws SQLException

⑦rollbackAndCloseQuietly(Connection)

⑧public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。


2、QueryRunner类

该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。


QueryRunner类提供了两个构造器:

①默认的构造器

②需要一个 javax.sql.DataSource 来作参数的构造器


QueryRunner类的主要方法:

①更新

public int update(Connection conn, String sql, Object... params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。

②插入

public T insert(Connection conn,String sql,ResultSetHandler rsh, Object... params) throws SQLException:只支持INSERT语句,其中 rsh - The handler used to create the result object from the ResultSet of auto-generated keys. 返回值: An object generated by the handler.即自动生成的键值。

③批量处理

public int[] batch(Connection conn,String sql,Object[][] params) throws SQLException: INSERT、UPDATE、DELETE语句。

public T insertBatch(Connection conn,String sql,ResultSetHandler rsh,Object[][] params)throws SQLException:只支持INSERT语句

④查询

public Object query(Connection conn, String sql, ResultSetHandler rsh,Object... params) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。


测试:


//添加
public void testInsert() throws Exception {
  QueryRunner runner = new QueryRunner();
  Connection conn = JDBCUtils.getConnection3();
  String sql = "insert into customers(name,email,birth)values(?,?,?)";
  int count = runner.update(conn, sql, "何成飞", "he@qq.com", "1992-09-08");
  System.out.println("添加了" + count + "条记录");
  JDBCUtils.closeResource(conn, null);
}


//删除
public void testDelete() throws Exception {
  QueryRunner runner = new QueryRunner();
  Connection conn = JDBCUtils.getConnection3();
  String sql = "delete from customers where id < ?";
  int count = runner.update(conn, sql,3);
  System.out.println("删除了" + count + "条记录");
  JDBCUtils.closeResource(conn, null);
}


3、ResultSetHandler接口及实现类

该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet.rs)。


接口的主要实现类:


cd63b973ee924fb6b79c3e7c411f5e8f.png


测试:


/*
* 测试查询:查询一条记录
* 使用ResultSetHandler的实现类:BeanHandler
*/
public void testQueryInstance() throws Exception{
  QueryRunner runner = new QueryRunner();
  Connection conn = JDBCUtils.getConnection();
  String sql = "select id,name,email,birth from customers where id = ?";
  BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
  Customer customer = runner.query(conn, sql, handler, 23);
  System.out.println(customer);
  JDBCUtils.closeResource(conn, null);
}


/*
* 测试查询:查询多条记录构成的集合
* 使用ResultSetHandler的实现类:BeanListHandler
*/
public void testQueryList() throws Exception{
  QueryRunner runner = new QueryRunner();
  Connection conn = JDBCUtils.getConnection();
  String sql = "select id,name,email,birth from customers where id < ?";
  BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
  List<Customer> list = runner.query(conn, sql, handler, 23);
  list.forEach(System.out::println);
  JDBCUtils.closeResource(conn, null);
}


/*
* 如何查询类似于最大的,最小的,平均的,总和,个数相关的数据,
* 使用ScalarHandler
*/
public void testQueryValue() throws Exception{
  QueryRunner runner = new QueryRunner();
  Connection conn = JDBCUtils.getConnection();
  //个数:
  // String sql = "select count(*) from customers where id < ?";
  // ScalarHandler handler = new ScalarHandler();
  // long count = (long) runner.query(conn, sql, handler, 20);
  // System.out.println(count);
  //最大值:
  String sql = "select max(birth) from customers";
  ScalarHandler handler = new ScalarHandler();
  Date birth = (Date) runner.query(conn, sql, handler);
  System.out.println(birth);
  JDBCUtils.closeResource(conn, null);
}


三、Apache-DBUtils驱动下载


Apache-DBUtils


相关文章
|
2月前
|
缓存 测试技术 API
API的封装步骤流程
API封装流程是一个系统化的过程,旨在将内部功能转化为可复用的接口供外部调用。流程包括明确需求、设计接口、选择技术和工具、编写代码、测试、文档编写及部署维护。具体步骤为确定业务功能、数据来源;设计URL、请求方式、参数及响应格式;选择开发语言、框架和数据库技术;实现数据连接、业务逻辑、错误处理;进行功能、性能测试;编写详细文档;部署并持续维护。通过这些步骤,确保API稳定可靠,提高性能。
|
1月前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
29 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
2月前
|
API PHP
ThinkPHP 通用的API格式封装
本文介绍了在ThinkPHP框架中如何统一封装API返回格式的方法,包括创建状态码枚举类、编写统一格式化函数以及在BaseController和Error控制器中重写`__call`方法来处理不存在的方法或控制器调用,以实现统一的错误处理和返回格式。
ThinkPHP 通用的API格式封装
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
3月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
117 0
|
4月前
|
开发框架 前端开发 JavaScript
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
|
4月前
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
4月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
4月前
|
SQL 开发框架 关系型数据库
基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
|
4月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理

推荐镜像

更多