🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 DBUtils是java编程中的数据库操作实用工具,小巧简单实用。 DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 Dbutils三个核心功能介绍 * QueryRunner中提供对sql语句操作的API. * ResultSetHandler接口,用于定义select操作后,怎样封装结果集. * DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法 # QueryRunner核心类 ## 方法 * update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作 * query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作 ## 添加、更新、删除操作 * update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作 * 添加 ~~~ public void insert(){ try { //获取一个用来执行SQL语句的对象 QueryRunner QueryRunner qr = new QueryRunner(); String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)"; Object[] params = {"股票收入", 5500, "收入"}; //JDBCUtils是自己封装的连接类,上一章节有 Connection conn = JDBCUtils.getConnection(); int line = qr.update(conn,sql,params);// 用来完成表数据的增加、删除、更新操作 //结果集处理 System.out.println("line = " + line); } catch (SQLException e) { throw new RuntimeException(e); } } ~~~ * 更新 ~~~ public void update(){ try { //创建一个QueryRunner对象,用来完成SQL语句的执行 QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?"; Object[] params = {"股票收入"}; Connection conn = JDBCUtils.getConnection(); int line = qr.update(conn, sql, params); //结果集的处理 System.out.println("line="+line); } catch (SQLException e) { throw new RuntimeException(e); } } ~~~ ## 查询 * query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作 ### ResultSetHandler结果集处理类 ![](https://box.kancloud.cn/3a17113a7c19fed40cde1d33185299d0_924x377.png) ![](https://box.kancloud.cn/3b1ee704311e3d58b54bc6fa061df3ef_917x493.png) ![](https://box.kancloud.cn/c47cff1fcfadb6c82e64863b67fe1520_916x660.png) ![](https://box.kancloud.cn/f2e3afc580c8830e44ea0a28dc86c12d_917x639.png) ### JavaBean JavaBean就是一个类,在开发中常用封装数据。具有如下特性 1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。 2. 提供私有字段:private 类型 字段名; 3. 提供getter/setter方法: 4. 提供无参构造 ### ArrayHandler与ArrayListHandler查询 * ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 ~~~ try { //获取QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT * FROM zhangwu"; Object[] params = {}; Connection conn = JDBCUtils.getConnection(); Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params); //结果集的处理 System.out.println( Arrays.toString(objArray) ); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ~~~ * ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 ~~~ try { //获取QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT * FROM zhangwu WHERE money>?"; Object[] params = {2000}; Connection conn = JDBCUtils.getConnection(); List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(), params); //结果集的处理 for (Object[] objArray : list) { System.out.println( Arrays.toString(objArray) ); } conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ~~~ ### BeanHandler与BeanListHandler查询 * BeanHandler :将结果集中第一条记录封装到一个指定的javaBean中。 ~~~ try{ //获取QueryRunner QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT * FROM zhangwu WHERE id=?"; Object[] params = {1}; Connection conn = JDBCUtils.getConnection(); ZhangWu zw = qr.query(conn, sql, new BeanHandler<ZhangWu>(ZhangWu.class), params); //结果集处理 System.out.println(zw); conn.close(); } catch(SQLException e){ throw new RuntimeException(e); } ~~~ * BeanListHandler :将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 ~~~ try{ //获取QueryRunner QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT * FROM zhangwu WHERE money>?"; Object[] params = {2000}; Connection conn = JDBCUtils.getConnection(); List<ZhangWu> list = qr.query(conn, sql, new BeanListHandler<ZhangWu>(ZhangWu.class), params); //结果集处理 for (ZhangWu zw : list) { System.out.println(zw); } conn.close(); } catch(SQLException e){ throw new RuntimeException(e); } ~~~ ### ColumnListHandler与ScalarHandler查询 * ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中 ~~~ try { //获取QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT name FROM zhangwu WHERE money>?"; Object[] params = {2000}; Connection conn = JDBCUtils.getConnection(); List<String> list = qr.query(conn, sql, new ColumnListHandler<String>(), params); //结果集的处理 for (String str : list) { System.out.println(str); } conn.close(); } catch (SQLException e) { e.printStackTrace(); } ~~~ * ScalarHandler:它是用于单数据。例如select count(*) from 表操作。 ~~~ try { //获取QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行SQL语句 String sql = "SELECT MAX(money) FROM zhangwu"; Object[] params = {}; Connection conn = JDBCUtils.getConnection(); Double max = qr.query(conn, sql, new ScalarHandler<Double>(), params); //结果集的处理 System.out.println("max=" + max); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ~~~