DBUtils
1、概述
DBUtils是JDBC的简化开发工具包。DBUtils封装了对JDBC的操作,简化了JDBC的操作,可以少些代码。
DBUtils有三个核心功能:
- QueryRunner中提供了对sql语句操作的API
- ResultSetHandler接口,用于确定如何对select语句的结果集进行封装
- DBUtils类,它是一个工具类,定义了关闭资源和处理事务的方法
2、QueryRunner核心类
- update(Connection conn, String sql, Object ... params),用来完成表数据的增加、删除和更新操作
- query(Connetion conn, String sql, ResultSetHandler<T> rsh, Object ... params),用来完成表数据的查询操作
3、QueryRunner实现添加、更新、删除操作
添加
1 package jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 6 import org.apache.commons.dbutils.DbUtils; 7 import org.apache.commons.dbutils.QueryRunner; 8 9 /** 10 * <p>Description:QueryRunner类insert演示 </p> 11 * @author Administrator 12 * @date 2018年11月5日下午3:24:14 13 */ 14 public class QueryRunnerInsert { 15 16 public static void main(String[] args) throws SQLException { 17 // 获取一个用于执行sql语句的对象,使用QueryRunner 18 QueryRunner qr = new QueryRunner(); 19 // sql语句 20 String sql = "insert into sort(sname,sprice,sdesc) values(?,?,?)"; 21 Object[] params = {"head first 设计模式",73,"java设计模式"}; 22 // 获得连接 23 Connection conn = JDBCUtils.getConnection(); 24 int row = qr.update(conn, sql, params); 25 System.out.println(row); 26 // 关闭资源 27 DbUtils.closeQuietly(conn); 28 } 29 30 }
更新
1 package jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 6 import org.apache.commons.dbutils.DbUtils; 7 import org.apache.commons.dbutils.QueryRunner; 8 9 /** 10 * <p>Description:QueryRunner类的update操作演示 </p> 11 * @author Administrator 12 * @date 2018年11月5日下午3:34:29 13 */ 14 public class QueryRunnerUpdate { 15 16 public static void main(String[] args) throws SQLException { 17 // 创建sql语句执行对象,QueryRunner 18 QueryRunner qr = new QueryRunner(); 19 // sql语句 20 String sql = "update sort set sprice=? where sname=?"; 21 // 设置占位符实际参数 22 Object[] params = {89, "head first 设计模式"}; 23 // 获得连接 24 Connection conn = JDBCUtils.getConnection(); 25 // 执行sql语句 26 int row = qr.update(conn, sql, params); 27 System.out.println(row); 28 // 关闭资源 29 DbUtils.closeQuietly(conn); 30 } 31 32 }
删除
1 package jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 6 import org.apache.commons.dbutils.DbUtils; 7 import org.apache.commons.dbutils.QueryRunner; 8 9 /** 10 * <p>Description:QueryRunner类delete操作演示 </p> 11 * @author Administrator 12 * @date 2018年11月5日下午3:41:10 13 */ 14 public class QueryRunnerDelete { 15 16 public static void main(String[] args) throws SQLException { 17 // 创建sql语句执行对象 18 QueryRunner qr = new QueryRunner(); 19 // sql语句 20 String sql = "delete from sort where sname=?"; 21 // 设置占位符实际参数 22 String sname = "疯狂Java讲义"; 23 // 获得连接 24 Connection conn = JDBCUtils.getConnection(); 25 // 执行sql语句 26 int row = qr.update(conn, sql, sname); 27 System.out.println(row); 28 // 关闭资源 29 DbUtils.closeQuietly(conn); 30 } 31 32 }
4、QueryRunner类实现查询操作
ResultSetHandler结果集处理类
ArrayHandler | 将结果集的第一条记录封装到一个Object[]数组中,数组中每个元素就是这条记录中的每个字段的值 |
ArrayListHandler | 将结果集的每一条记录都封装到一个Object[]数组中,再将这些数组封装到List集合中 |
BeanHandler | 将结果集中的第一条记录封装到一个指定的javaBean中 |
BeanListHandler | 将结果集中的每一条记录封装到一个指定的javaBean中,再将这些javaBean封装到List集合中 |
ColumeListHandler | 将结果集中指定列字段的值,封装到一个List集合中 |
ScalarHandler | 用于单数据。例如select count(*) from表操作 |
MapHandler | 将结果集的第一条记录封装到一个Map集合中,key列名,value列数据 |
MapListHandler | 将结果集的每一条封装到一个指定的Map集合中,再将Map集合存储到List中 |
JavaBean
JavaBean就是一个类,在开发中用于封装数据。具有如下特点:
- 需要实现接口:java.io.Serializable,通常实现接口步骤省略不写。
- 提供私有的字段:private 类型 字段名
- 提供getter/setter方法
- 提供空参构造方法
1 package jdbc; 2 /** 3 * <p>Description:Sort实体类 </p> 4 * @author Administrator 5 * @date 2018年11月4日下午9:40:58 6 */ 7 public class Sort { 8 private int sid; // id 9 private String sname; // 名字 10 private double sprice; // 价格 11 private String sdesc; // 描述 12 13 public Sort(int sid, String sname, double sprice, String sdesc) { 14 super(); 15 this.sid = sid; 16 this.sname = sname; 17 this.sprice = sprice; 18 this.sdesc = sdesc; 19 } 20 21 // 空参构造 22 public Sort() {} 23 24 public int getSid() { 25 return sid; 26 } 27 public void setSid(int sid) { 28 this.sid = sid; 29 } 30 public String getSname() { 31 return sname; 32 } 33 public void setSname(String sname) { 34 this.sname = sname; 35 } 36 public double getSprice() { 37 return sprice; 38 } 39 public void setSprice(double sprice) { 40 this.sprice = sprice; 41 } 42 public String getSdesc() { 43 return sdesc; 44 } 45 public void setSdesc(String sdesc) { 46 this.sdesc = sdesc; 47 } 48 49 @Override 50 public String toString() { 51 return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]"; 52 } 53 }
ArrayHandler查询
1 package jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.util.Arrays; 6 7 import org.apache.commons.dbutils.DbUtils; 8 import org.apache.commons.dbutils.QueryRunner; 9 import org.apache.commons.dbutils.handlers.ArrayHandler; 10 11 /** 12 * <p>Description:ArrayHandler处理结果集演示 </p> 13 * @author Administrator 14 * @date 2018年11月5日下午4:14:06 15 */ 16 public class ArrayHandlerDemo { 17 18 public static void main(String[] args) throws SQLException { 19 // 创建QueryRunner类对象 20 QueryRunner qr = new QueryRunner(); 21 // sql语句 22 String sql = "select * from sort"; 23 Object[] params = {}; 24 // 获得连接 25 Connection conn = JDBCUtils.getConnection(); 26 // 执行sql语句 27 Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params); 28 // 处理结果集 29 System.out.println(Arrays.toString(objArray)); 30 // 关闭资源 31 DbUtils.closeQuietly(conn); 32 } 33 34 }
ArrayListHandler查询
1 package jdbc; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.util.Arrays; 6 import java.util.List; 7 8 import org.apache.commons.dbutils.DbUtils; 9 import org.apache.commons.dbutils.QueryRunner; 10 import org.apache.commons.dbutils.handlers.ArrayListHandler; 11 12 /** 13 * <p>Description:ArrayListHandler类处理结果集演示 </p> 14 * @author Administrator 15 * @date 2018年11月5日下午4:22:06 16 */ 17 public class ArrayListHandlerDemo { 18 19 public static void main(String[] args) throws SQLException { 20 // 创建sql语句执行对象 21 QueryRunner qr = new QueryRunner(); 22 // sql语句 23 String sql = "select * from sort"; 24 Object[] params = {}; 25 // 获得连接 26 Connection conn = JDBCUtils.getConnection(); 27 // 执行sql语句 28 List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(), params); 29 // 遍历list集合单独取到每一条记录 30 for (Object[] objArray: list) { 31 System.out.println(Arrays.toString(objArray)); 32 } 33 // 关闭资源 34 DbUtils.closeQuietly(conn); 35 } 36 37 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现