• Java实战之04JavaWeb-06DBUtils


    一、DBUtils

    1.DBUtils的简介

    Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

    2.DBUtils中的API的概要介绍

    QueryRunner类:sql操作的核心类 这个对象内部封装着操作数据的方法

    ResultSetHandler接口:代表结果集到实体的映射封装的功能

    为什么是接口:具体封装的规则不知道 要根据实体业务进行自行操作

    DButils类:主要是关于数据库的关闭 事务的提交相关的方法

    3.QueryRunner的API详解

    注意:在使用DBUtils之前 导入的jar包

    1)数据库驱动

    2)连接池的jar

    3)DBUtils的jar

    (1)怎样创建QueryRunner

    有两种方式可以创建QueryRunner

    第一种无参:new QueryRunner();

    一般情况下 结合事务操作一起使用

    第二种有参:new QueryRunner(DataSource);

    一般情况下 不需要事务控制的时候使用

    注意:程序中操作sql时 必须得有Connection对象,有数据源参数的构造方法会自动从数据源中获得一个Connection对象操作数据库。无参的构造方法在创建QueryRunner时没有提供Connection的对象信息,在指定操作sql的方法时也得传入Connection。

    QueryRunner中的方法

    batch

    update

    query

    (2)更新数据的操作(单条sql执行)

    update操作:

    update方法有三个参数 是通过这三个参数的组合 形成多个方法

    Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

    sql:要执行sql语句  是必须有的

    params:代笔占位符的实际的参数

    通过上述参数可以组成哪些方法

    update(Connection,sql,params);

    update(Connection,sql);

    update(sql,params);

    update(sql);

     1     @Test
     2     public void test1() throws SQLException{
     3         //需求:修改products表中的id=100的商品的category为 生活
     4         //1、创建QueryRunner
     5         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
     6         //2、执行sql
     7         String sql = "update products set category=? where id=?";
     8         int update = runner.update(sql, "生活","100");
     9         System.out.println(update);
    10     }

    (3)更新数据的操(批量sql执行)

    batch操作---同时执行sql结构相同的多条语句

    参数:

    Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

    sql:要执行sql语句  是必须有的

    params:二维数组

    一维代表是指定的sql

    二维代表sql中的占位符的实际参数

    例如:

    sql:insert into products values(?,?,?);

    param:

    {

      {500,ios入门,15},

      {600,C#入门,28},

      {700,ruby入门,45},

      {800,hadoop入门,99}

    }

    insert语句执行几次:4次  每一次执行3个参数

    需求:向products表中批量插入2条数据

     1 //1、创建QueryRunner对象
     2         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
     3         //2、执行sql
     4         String sql = "insert into products values(?,?,?,?,?,?,?)";
     5         //Object[][] params = new Object[2][7];
     6         //params[0][0]="500";
     7         Object[][] params = {
     8                 {"500","ruby入门",89,"感性",800,"bookcover/105.jpg","好书啊好书"},
     9                 {"600","hadoop入门",89,"感性",800,"bookcover/106.jpg","好书啊好书"}
    10         };
    11         int[] batch = runner.batch(sql, params);
    12         //{1,1}
    13         for(int i:batch){
    14             System.out.println(i);
    15         }

    (4)查询的操作query

    query方法执行select语句

    参数:

    Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

    sql:要执行sql语句  是必须有的

    params:代笔占位符的实际的参数

    ResultSetHandelr:结果集封装的功

     1     @Test
     2     public void test1() throws SQLException{
     3         //1、创建QueryRunner
     4         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
     5         //2、执行sql语句
     6         String sql = "select * from products";
     7         List<Product> query = runner.query(sql, new ResultSetHandler<List<Product>>() {
     8             @Override
     9             public List<Product> handle(ResultSet rs) throws SQLException {
    10                 //写自己的封装的逻辑
    11                 List<Product> list = new ArrayList<Product>();
    12                 while(rs.next()){
    13                     Product pro = new Product();
    14                     pro.setId(rs.getString("id"));
    15                     pro.setName(rs.getString("name"));
    16                     pro.setCategory(rs.getString("category"));
    17                     pro.setDescription(rs.getString("description"));
    18                     pro.setImgurl(rs.getString("imgurl"));
    19                     pro.setPnum(rs.getInt("pnum"));
    20                     pro.setPrice(rs.getDouble("price"));
    21                     list.add(pro);
    22                 }
    23                 return list;
    24             }
    25 
    26         });
    27 
    28         System.out.println(query);
    29     }

    二、ResultSetHandler接口的实现类

    BeanListHandler:返回是List<T>

    BeanHandler:返回的是T

    MapListHandler:返回是List<Map<String,Object>>

    MapHandler:返回是Map<String,Object>

    ScalarHandler:返回的是一个object获得的是一个值 是查出的虚拟表的左上角的 值,常用在聚合函数查询中

    ---------------------------------------------------------------

    ArrayListHandler:List<Object[]>

    ArrayHandler:Object[]

    ColumnListHandler:List<Object> 查询的是结构的某一列的数据集合

    KeyedHandler:返回值Map<Object,Map<String,Object>>

    {

      200={id=200, category=生活, price=78.0, pnum=120, description=好书一本, name=android入门经典, imgurl=bookcover/102.jpg},

      100={id=100, category=生活, price=88.0, pnum=100, description=好书一本, name=java入门经典, imgurl=bookcover/101.jpg}

    }

    DbUtils工具类:工具类,包括事务的提交,回滚和资源的关闭的工具方法,使用不多

  • 相关阅读:
    DAY10-MYSQL表操作
    DAY10-MYSQL完整性约束
    DAY10-MYSQL数据类型
    DAY10-MYSQL存储引擎
    DAY10-MYSQL库操作
    017.2 基本数据类型对象包装类
    017.1 stringBuffer
    016.2 String
    16.1 eclipse设置
    015.5线程常见用法(面试题)
  • 原文地址:https://www.cnblogs.com/minihouseCoder/p/5629473.html
Copyright © 2020-2023  润新知