zoukankan      html  css  js  c++  java
  • JDBC工具类-DButils(QueryRunner-ResultSetHandler)

    、简述

    DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。

    DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

    1)DBUtils三个核心功能

    ① QUeryRunner中提供对sql语句操作的API。

    ② ResultSetHandler接口,用于定义select操作后,怎样封装结果集

    ③ DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

    2)注意

    ① 需要导入的jar包:①MySQL驱动 ②c3p0包 ③DBUtils包

    ② 添加c3p0-config.xml配置

    ③ 可以自动添加一个JDBCUtils工具类:用来获取c3p0连接池对象

    二、QueryRunner核心类

    1)QueryRunner:带参-提供数据源,dbutils底层自动维护连接Connection;无参-提供连接池对象,在调用下面的方法时必须提供Connection对象。

    • QueryRunner();创建一个与数据库无关的QueryRunner对象。后期在操作数据库的时候,需要手动给一个Connection对象,他可以手动控制事务。
      • Connection.setAutoCommit(false);设置手动管理事务
      • Connection.commit();提交事务
    • QueryRunner(DataSource ds);创建一个与数据库关联的QueryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。

    2)update(String sql,Object...params):可执行 增-INSERT、删-DELETE、改-UPDATE

    • update(String sql);
    • update(String sql,Object...params);
    • update(Connection conn,String sql,Object...params);

    3)query(String  sql,ResultSetHandler<T> rsh,Object...params)执行 查询-SELECT

    • query(String sql,ResultSetHandler rsh);不需要替换参数来执行已给予的SELECT语句
    • query(String sql,ResultSetHandler,Object ...params);需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象
    • query(Connection conn,String sql,ResultSetHandler rsh,Object ...params);支持事务,需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象

    三、ResultSetHandler结果集处理类

    执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。

    • ArrayHandler:适合取1条记录,把结果集中的第一行数据转成对象数组。
    • ArrayListHandler:适合取多条记录,把结果集中的每一行数据都转成一个对象数组,再存放到List中。
    • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中(把每条记录封装成对象,适合取一条记录)。
    • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
    • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
    • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
    • ColumnListHandler:将结果集中某一列的数据存放到List中。
    • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
    • ScalarHandler:将结果集第一行的某一列放到某个对象中。

    四、JavaBean

    类似于Model模型

    需要实现接口:java.io.Serializable 

    提供私有字段:private 类型 字段名;

    提供getter/setter方法:

    提供无参构造

    五、代码演示

      1 import java.sql.SQLException;
      2 import java.util.List;
      3 import java.util.Map;
      4 
      5 import javax.sql.DataSource;
      6 
      7 import org.apache.commons.dbutils.QueryRunner;
      8 import org.apache.commons.dbutils.handlers.BeanHandler;
      9 import org.apache.commons.dbutils.handlers.BeanListHandler;
     10 import org.apache.commons.dbutils.handlers.ColumnListHandler;
     11 import org.apache.commons.dbutils.handlers.MapHandler;
     12 import org.apache.commons.dbutils.handlers.MapListHandler;
     13 import org.apache.commons.dbutils.handlers.ScalarHandler;
     14 
     15 import com.mchange.v2.c3p0.ComboPooledDataSource;
     16 
     17 public class TestQueryRunner {
     18 
     19     public static void main(String[] args) throws SQLException {
     20 
     21         //获取数据源
     22         DataSource ds = new ComboPooledDataSource();
     23         QueryRunner queryRunner = new QueryRunner(ds);
     24 
     25 //------------------------------更新语句------------------------------------    
     26         
     27 //        String sql = "SELECT * FROM goods WHERE id = ?";
     28 //        Map<String, Object> query = queryRunner.query(sql, new MapHandler(),1);
     29 //        for(String key:query.keySet()) {
     30 //            System.out.println(key+":"+query.get(key));
     31 //        }
     32 
     33 //        String sql = "DELETE FROM type WHERE id in(?,?)";
     34 //        int update = queryRunner.update(sql,6,7);
     35 //        System.out.println(update);
     36 
     37 //        String sql = "UPDATE type SET name = '生日系列' WHERE id = ?";
     38 //        int update = queryRunner.update(sql,8);
     39 //        System.out.println(update);
     40 
     41 //        String sql = "INSERT INTO type (name) values(?)";
     42 //        int update = queryRunner.update(sql,"成人系列");
     43 //        System.out.println(update);
     44 
     45 //------------------------------查询语句------------------------------------        
     46         
     47         //ArrayHandler:将查询的结果的第一行放到一个数组中
     48 //        String sql = "SELECT * FROM goods";
     49 //        Object[] query = queryRunner.query(sql, new ArrayHandler());
     50 //        for (Object o : query) {
     51 //            System.out.println(o);
     52 //        }
     53 
     54         //ArrayListHandler:将查询的结果的每一行放到一个数组中,然后再将数组放到集合中;
     55 //        String sql = "SELECT * FROM goods";
     56 //        List<Object[]> query = queryRunner.query(sql, new ArrayListHandler());
     57 //        for (Object[] obj : query) {
     58 //            for (Object o : obj) {
     59 //                System.out.print(o + " ");
     60 //            }
     61 //            System.out.println();
     62 //        }
     63 
     64         //BeanHandler:将查询的结果的第一行封装到一份javabean对象中;
     65 //        String sql = "SELECT * FROM goods";
     66 //        Goods query = queryRunner.query(sql, new BeanHandler<Goods>(Goods.class));
     67 //        System.out.println(query);
     68 
     69         //BeanListHandler:将查询的结果的每一行封装到一个javabean对象中,然后再将这些对象存入list中;
     70 //        String sql = "SELECT * FROM goods";
     71 //        List<Goods> list = queryRunner.query(sql, new BeanListHandler<Goods>(Goods.class));
     72 //        for(Goods goods:list) {
     73 //            System.out.println(goods.getName());
     74 //        }
     75 
     76         //ColumnListHandler:查询指定的列,将查询结果放到一个List中
     77 //        String sql = "SELECT * FROM goods";
     78 //        List<Object> list = queryRunner.query(sql, new ColumnListHandler<Object>("name"));
     79 //        for(Object o:list) {
     80 //            System.out.println(o);
     81 //        }
     82         
     83         //ScalarHandler:将查询的结果的第一行的某一列放到一个对象中;精确定位到某个值;
     84 //        String sql = "SELECT COUNT(*) FROM goods";
     85 //        Long query = queryRunner.query(sql, new ScalarHandler<Long>());
     86 //        System.out.println(query);
     87 
     88         //MapHandler:将查询的结果的第一行存入到一个map中,键为列名,值为各列值;
     89 //        String sql = "SELECT * FROM goods";
     90 //        Map<String, Object> query = queryRunner.query(sql, new MapHandler());
     91 //        for (String key : query.keySet()) {
     92 //            System.out.println(key + ":" + query.get(key));
     93 //        }
     94 
     95         //MapListHandler:将查询的结果的每一行存入到一个map中,键为列名,值为各列值;然后再将map存入list中;
     96 //        String sql = "SELECT * FROM goods";
     97 //        List<Map<String, Object>> query = queryRunner.query(sql, new MapListHandler());
     98 //        for (Map<String, Object> map : query) {
     99 //            for(String key:map.keySet()) {
    100 //                System.out.print(key+":"+map.get(key)+" ");
    101 //            }
    102 //            System.out.println();
    103 //        }
    104     }
    105 
    106 }
  • 相关阅读:
    Flex框架Cairngorm2 SequenceCommand用法封装
    SourceMate插件
    Cairngorm2 中SequenceCommand用法
    SourceMate出新版本了
    Flash Builder 4 安装ANT插件
    Text Layout Framework
    浅谈继承和组合
    Flex Ant脚本模板
    JS上传图片转化成Base64编码demo
    js动态改变iframe的高度
  • 原文地址:https://www.cnblogs.com/Dm920/p/11672809.html
Copyright © 2011-2022 走看看