jdbc框架-dbutils的简单使用

dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用

使用步骤:
  1.导入jar包(commons-dbutils-1.4.jar)
  2.创建一个queryrunner类
    queryrunner作用:操作sql语句

    构造方法:
      new QueryRunner(Datasource ds);

  3.编写sql
  4.执行sql
    query(..):执行r操作
    update(...):执行cud操作

核心类或接口
  QueryRunner:类名
作用:操作sql语句

构造器:
  new QueryRunner(Datasource ds);

注意:
  底层帮我们创建连接,创建语句执行者 ,释放资源.

常用方法:
  query(..):
  update(..):

DbUtils:释放资源,控制事务 类
  closeQuietly(conn):内部处理了异常
  commitAndClose(Connection conn):提交事务并释放连接
....

示例一:insert

1.创建一个项目DataSourse

2.新建2个包,分别为com.util.hjh、com.dbutils.hjh

3.com.util.hjh包下放工具类DataSourseUtils.java;包com.dbutils.hjh放DbutilTest01.java

4.导入jar包(commons-dbutils-1.4.jar),buildPath。

DataSourseUtils.java源码:

  1. package com.util.hjh;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import javax.sql.DataSource;
  9. import com.mchange.v2.c3p0.ComboPooledDataSource;
  10.  
  11. public class DataSourseUtils {
  12. //建立连接池ds
  13. private static ComboPooledDataSource ds = new ComboPooledDataSource();
  14.  
  15. //获取数据源
  16. public static DataSource getDataSourse() {
  17. return ds;
  18. }
  19.  
  20. //获取连接
  21. public static Connection getConnection() throws SQLException {
  22. return ds.getConnection();
  23. }
  24.  
  25. //释放资源
  26. public static void closeResourse(Connection conn,Statement st) {
  27. try {
  28. if(st!=null) {
  29. st.close();
  30. }else {
  31. st = null;
  32. }
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. }
  36. try {
  37. if(conn!=null) {
  38. conn.close();
  39. }else {
  40. conn = null;
  41. }
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46.  
  47. /**释放资源closeResourse(conn,ps)*/
  48. public static void closeResourse(Connection conn,PreparedStatement ps) {
  49. try {
  50. if(ps!=null) {
  51. ps.close();
  52. }else {
  53. ps = null;
  54. }
  55. } catch (SQLException e) {
  56. e.printStackTrace();
  57. }
  58. try {
  59. if(conn!=null) {
  60. conn.close();
  61. }else {
  62. conn = null;
  63. }
  64. } catch (SQLException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. /**释放资源closeResourse(rs)*/
  69. public static void closeResourse(ResultSet rs) {
  70. try {
  71. if(rs!=null) {
  72. rs.close();
  73. }else {
  74. rs = null;
  75. }
  76. } catch (SQLException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. }

DbutilTest01.java源码:

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.junit.Test;
  6. import com.util.hjh.DataSourseUtils;
  7.  
  8. public class DbutilsTest01 {
  9. @Test
  10. public void insert() throws SQLException {
  11. //创建QueryRunner对象,操作sql语句
  12. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  13.  
  14. //编写sql语句
  15. String sql = "insert into student values(?,?,?);";
  16.  
  17. //执行sql
  18. int i = qr.update(sql,"07","wdc","79");
  19.  
  20. System.out.println("插入了"+i+"行数据");
  21. }
  22. }

数据库表现为:

DBUtils用的最多的莫过于其结果集的处理,毕竟仅仅得到一个ResultSet屁用没有。而结果集的处理正是依赖于ResultSetHandler 接口及其实现类。

ResultSetHandler:封装结果集 接口
  ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

(了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回
(了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
(了解)ColumnListHandler, 将查询结果的指定一列放入list中返回 
(了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

ArrayHandler, 将查询结果的第一条记录封装成数组,返回

ArrayHandlerTest.java源码:

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import java.util.Arrays;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.ArrayHandler;
  7. import org.junit.Test;
  8. import com.util.hjh.DataSourseUtils;
  9.  
  10. public class ArrayHandlerTest {
  11. @Test
  12. public void test() throws SQLException {
  13. //创建QueryRunner对象,操作sql语句
  14. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  15.  
  16. //编写sql语句
  17. String sql = "select * from student";
  18.  
  19. //执行sql ArrayHandler, 将查询结果的第一条记录封装成数组,返回
  20. Object [] query = qr.query(sql, new ArrayHandler());
  21.  
  22. //打印
  23. System.out.println(Arrays.toString(query));
  24. }
  25. }

代码运行,console输出为:[1, hejh, 100]

ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回

ArrayListHandlerTest.java源码:

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import org.apache.commons.dbutils.QueryRunner;
  7. import org.apache.commons.dbutils.handlers.ArrayListHandler;
  8. import org.junit.Test;
  9. import com.util.hjh.DataSourseUtils;
  10.  
  11. public class ArrayListHandlerTest {
  12. @Test
  13. public void test() throws SQLException {
  14. //创建QueryRunner对象,操作sql语句
  15. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  16.  
  17. //编写sql语句
  18. String sql = "select * from student";
  19.  
  20. //执行sql ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
  21. List<Object[]> list = qr.query(sql, new ArrayListHandler());
  22.  
  23. //打印
  24. for (Object[] obj : list) {
  25. System.out.println(Arrays.toString(obj));
  26. }
  27. }
  28. }

局部测试,代码运行,console输出为:

  1. [1, hejh, 100]
  2. [2, swy, 101]
  3. [3, haha, 99]
  4. [4, sansa, 88]
  5. [5, zys, 88]
  6. [6, yz, 95]
  7. [7, wdc, 79]
  8. [22, erya, 103]

★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回(首先需要创建一个bean类)

Student的bean类:

  1. package com.bean.hjh;
  2.  
  3. public class Student {
  4. private int id;
  5. private String name;
  6. private int grate;
  7.  
  8. public Student() {}
  9. public Student(int id,String name,int grate) {
  10. this.id = id;
  11. this.name = name;
  12. this.grate = grate;
  13. }
  14.  
  15. public int getId() {
  16. return id;
  17. }
  18. public void setId(int id) {
  19. this.id = id;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public int getGrate() {
  28. return grate;
  29. }
  30. public void setGrate(int grate) {
  31. this.grate = grate;
  32. }
  33.  
  34. @Override
  35. public String toString() {
  36. return "Student [id=" + id + ", name=" + name + ", grate=" + grate + "]";
  37. }
  38. }

  1. BeanHandlerTest.java源码:
  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.apache.commons.dbutils.handlers.BeanHandler;
  6. import org.junit.Test;
  7. import com.util.hjh.DataSourseUtils;
  8. import com.bean.hjh.Student;
  9.  
  10. public class BeanHandlerTest {
  11. @Test
  12. public void test() throws SQLException {
  13. //创建QueryRunner对象,操作sql语句
  14. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  15.  
  16. //编写sql语句
  17. String sql = "select * from student";
  18.  
  19. //执行sql BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
  20. Student student = qr.query(sql, new BeanHandler<>(Student.class));
  21.  
  22. //打印
  23. System.out.println(student.toString());
  24. }
  25. }

console输出:Student [id=1, name=hejh, grate=100]

★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanListHandler;
  7. import org.junit.Test;
  8.  
  9. import com.bean.hjh.Student;
  10. import com.util.hjh.DataSourseUtils;
  11.  
  12. public class BeanListHandlerTest {
  13. @Test
  14. public void test() throws SQLException {
  15. //创建QueryRunner对象,操作sql语句
  16. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  17.  
  18. //编写sql语句
  19. String sql = "select * from student";
  20.  
  21. //执行sql ★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
  22. List<Student> list =qr.query(sql, new BeanListHandler<>(Student.class));
  23.  
  24. //打印
  25. for (Student student : list) {
  26. System.out.println(student.toString());
  27. }
  28. }
  29. }

console输出:

  1. Student [id=1, name=hejh, grate=100]
  2. Student [id=2, name=swy, grate=101]
  3. Student [id=3, name=haha, grate=99]
  4. Student [id=4, name=sansa, grate=88]
  5. Student [id=5, name=zys, grate=88]
  6. Student [id=6, name=yz, grate=95]
  7. Student [id=7, name=wdc, grate=79]
  8. Student [id=22, name=erya, grate=103]

MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回

案例:

数据库同上、项目结构同上,新增MapHandlerTest.java类

MapHandlerTest.java源码:

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import java.util.Map;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.MapHandler;
  7. import org.junit.Test;
  8. import com.util.hjh.DataSourseUtils;
  9.  
  10. public class MapHandlerTest {
  11. @Test
  12. public void test() throws SQLException {
  13. //创建QueryRunner对象,操作sql语句
  14. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  15.  
  16. //编写sql语句
  17. String sql = "select * from student";
  18.  
  19. //执行sql MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
  20. Map<String,Object> map = qr.query(sql, new MapHandler());
  21.  
  22. //打印
  23. System.out.println(map);
  24. }
  25. }

console输出为:

  1. {grate=100, name=hejh, id=1}

MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回

案例:

数据库同上、项目结构同上,新增MapListHandlerTest.java类

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.apache.commons.dbutils.QueryRunner;
  7. import org.apache.commons.dbutils.handlers.MapListHandler;
  8. import org.junit.Test;
  9. import com.util.hjh.DataSourseUtils;
  10.  
  11. public class MapListHandlerTest {
  12. @Test
  13. public void test() throws SQLException {
  14. //创建QueryRunner对象,操作sql语句
  15. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  16.  
  17. //编写sql语句
  18. String sql = "select * from student";
  19.  
  20. //执行sql MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
  21. List<Map<String,Object>> list = qr.query(sql, new MapListHandler());
  22. //打印
  23. for (Map<String, Object> map : list) {
  24. System.out.println(map);
  25. }
  26. }
  27. }

console输出为:

  1. {grate=100, name=hejh, id=1}
  2. {grate=101, name=swy, id=2}
  3. {grate=99, name=haha, id=3}
  4. {grate=88, name=sansa, id=4}
  5. {grate=88, name=zys, id=5}
  6. {grate=95, name=yz, id=6}
  7. {grate=79, name=wdc, id=7}
  8. {grate=103, name=erya, id=22}

ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

案例:

数据库同上、项目结构同上,新增ScalarHandlerTest.java类

  1. package com.dbutils.hjh;
  2.  
  3. import java.sql.SQLException;
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.apache.commons.dbutils.handlers.ScalarHandler;
  6. import org.junit.Test;
  7. import com.util.hjh.DataSourseUtils;
  8.  
  9. public class ScalarHandlerTest {
  10. @Test
  11. public void test() throws SQLException {
  12. //创建QueryRunner对象,操作sql语句
  13. QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
  14.  
  15. //编写sql语句
  16. String sql = "select count(*) from student";
  17.  
  18. //执行sql ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值
  19. Object obj =qr.query(sql, new ScalarHandler());
  20.  
  21. //打印
  22. System.out.println(obj); //console输出为:8
         System.out.println(obj.getClass().getName());//java.lang.Long 查看类型

  23. }
  24. }

jdbc框架-dbutils的简单使用的更多相关文章

  1. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表

    本文目录:       1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData        2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData       ...

  2. (二十二)自定义简化版JDBC(Dbutils框架的设计思想)

    目录 元数据概念 DataBaseMetaData ParameterMetaData ResultSetMetaData 编写简化版的JDBC O-R Mapping 概念 自定义简化版JDBC 元 ...

  3. 【总结】编写自己的JDBC框架

    一.数据库连接池: 在一般用JDBC 进行连接数据库进行CRUD操作时,每一次都会: 通过:java.sql.Connection conn = DriverManager.getConnection ...

  4. javaweb学习总结(四十)——编写自己的JDBC框架

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  5. JDBC框架

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  6. 编写自定义的JDBC框架与策略模式

    本篇根据上一篇利用数据库的几种元数据来仿造Apache公司的开源DbUtils工具类集合来编写自己的JDBC框架.也就是说在本篇中很大程度上的代码都和DbUtils中相似,学完本篇后即更容易了解DbU ...

  7. 黑马程序员—创建JDBC框架及原理分析

    对于Java数据库的连接,由最初学习的每次全部手工代码,到后面的不断利用知识简化代码量:这是不断学习的过程,就像人类由原始社会的钻木取火到当代的文明,都是一步步过来的! 本文不从最开始的JDBC入门开 ...

  8. javaweb总结(四十)——编写自己的JDBC框架

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  9. 编写自己的JDBC框架(转)

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

随机推荐

  1. python基础---递归函数真题解析

    方法一.有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. 即: {'k ...

  2. JEECMS8——系列文档

    jeecms8 系列文章地址 https://blog.csdn.net/weixin_37490221/article/details/78652035

  3. js笔试-接收get请求参数

    请编写一个JavaScript函数,它的用途是接收url中get请求的参数,并返回为对象, 如: var url = “https://i.cnblogs.com/EditPosts.aspx?opt ...

  4. C#——找出实现某个接口的所有类 - Hello World - CSDN博客

    原文:C#--找出实现某个接口的所有类 - Hello World - CSDN博客 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0125260 ...

  5. css3新特性概览

    一.特性 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 css3允许背景属性设置多个属性值,如:background-image,background-repeat,backg ...

  6. HNOI 2019 多边形

    HNOI 2019 多边形 题意 小 R 与小 W 在玩游戏. 他们有一个边数为\(n\)的凸多边形,其顶点沿逆时针方向标号依次为\(1,2,3...n\).最开始凸多边形中有\(n\)条线段,即多边 ...

  7. Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点

    给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...

  8. BigDecimal的四则运算及小数位数格式

    一.加法 BigDecimal b1 = new BigDecimal("20");BigDecimal b2 = new BigDecimal("30");B ...

  9. TZ_09_常用jQuery操作

    1.实现对chexkbox进行批量删除 checkbox属性 <td><input name="ids" type="checkbox" va ...

  10. java习题-集合框架-泛型

    集合框架 一 去除List集合中的重复元素. 思路: 1,先创建一个临时容器.用于存储唯一性的元素.2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在.3,如果存在,不存储到临时容器,如果不存 ...