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


相关文章
|
5月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
56 8
|
25天前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
2月前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
3月前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
63 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
3月前
|
数据可视化 API PHP
学生信息管理系统-可视化-科目管理CRUD代码生成器
学生信息管理系统-可视化-科目管理CRUD代码生成器
54 5
|
3月前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
351 2
|
4月前
|
前端开发 IDE 数据库连接
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
本文详细介绍了ThinkPHP6中模型层的使用,包括模型属性设置、表映射关系、以及如何在控制层中使用模型层进行CRUD操作。
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
|
3月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
158 0
|
5月前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
41 9
|
1月前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
341 33
The Past, Present and Future of Apache Flink

热门文章

最新文章

推荐镜像

更多