详解待续。。。

DBUtilsTest.java

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import com.kk.jdbc.JDBCTools;

public class DBUtilsTest {

  /*
    * ScalarHandler:把结果集转为一个数值(可以是任意基本数据类型和字符串,Date等)返回
    * */
   @Test
   public void testScalarHandler(){
  
      Connection con = null;
      try {
   
         con=JDBCTools.getConnection();
         String sql = "select count(id) from customers";
         Object result=qr.query(con, sql, new ScalarHandler());
         System.out.println(result);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
         JDBCTools.release(null, null, con);
      }
   }
 
 
   /*
    * MapListHandler:将结果集转为一个Map的List,
    * Map对应查询的一条记录,键:SQL查询的列名(不是列的别名),值:列的值
    * MapListHandler返回的是多条记录对应的Map的集合
    * */
   @Test
   public void testMapListHandler(){
  
      Connection con = null;
      try {
   
         con=JDBCTools.getConnection();
         String sql = "select name from customers where id=?";
         List<Map<String,Object>> result = (List<Map<String, Object>>) qr.query(con, sql, new MapListHandler());
         System.out.println(result);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
         JDBCTools.release(null, null, con);
      }
   }
 
   /*
    * MapHandler:返回SQL对应的第一条记录对应的Map对象;
    *   键:SQL查询的列名(不是列的别名)
    *   值:列的值
    * */
   @Test
   public void testMapHandler(){
  
      Connection con = null;
      try {
   
         con=JDBCTools.getConnection();
         String sql = "select id,name,email,birth from customers";
         Map<String,Object> result = (Map<String, Object>) qr.query(con, sql, new MapHandler());
         System.out.println(result);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
         JDBCTools.release(null, null, con);
      }
   }
 
   /*
    * BeanListHandler:把结果集转为一个List,该List不为空,但可能为空集合(size()方法返回0)
    * 若SQL语句能够查询到记录,List中存放创建BeanListHandler传入的Class对象对应的对象。
    * */
   @Test
   public void testBeanListHandler(){
  
      Connection con = null;
      try {
   
         con=JDBCTools.getConnection();
         String sql = "select id,name,email,birth from customers";
         List<Customer> customers = (List<Customer>) qr.query(con, sql, new BeanListHandler(Customer.class));
         System.out.println(customers);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
          JDBCTools.release(null, null, con);
      }
   }
 
   /*
    * BeanHandler:把结果集的第一条记录转为创建BeanHandler对象时传入的Class参数对应的对象
    * */
   @Test
   public void testBeanHandler(){
  
      Connection con = null;
      try {
   
         con=JDBCTools.getConnection();
         String sql = "select id,name,email,birth from customers where id=?";
         Customer customer=(Customer) qr.query(con, sql, new BeanHandler(Customer.class), 6);
         System.out.println(customer);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
          JDBCTools.release(null, null, con);
      }
   }
 
 
 
   // 1、创建QueryRunner的实现类
   QueryRunner qr = new QueryRunner();

  /*
    * QueryRunner的query方法的返回值取决于ResultSetHandler参数的handle方法的返回值
    * */
   @Test
   public void testQuery() {

    Connection con = null;
      class MyResultSetHandler implements ResultSetHandler{

      @Override
         public Object handle(ResultSet rs) throws SQLException {
    
            List<Customer> customers=new ArrayList<>();
            while(rs.next()){
               Integer id=rs.getInt(1);
               String name=rs.getString(2);
               String email=rs.getString(3);
               Date birth=rs.getDate(4);
     
               Customer customer=new Customer(id,name,email,birth);
               customers.add(customer);
            }
            return customers;
         }
      }
  
      try {
         con = JDBCTools.getConnection();
         String sql = "select id,name,email,birth from customers";
         Object ob=qr.query(con, sql, new MyResultSetHandler());
         System.out.println("谢荣康:"+ob);
      } catch (Exception e) {
         e.printStackTrace();
      }finally{
         JDBCTools.release(null, null, con);
      }
   }

   /**
    * 测试 QueryRunner类的update方法(insert 、update、delete)
    */
   @Test
   public void testQueryRunnerUpdate() {

     // 2、使用update方法
      String sql = "delete from customers where id in (?,?)";
      Connection con = null;

    try {
         con = JDBCTools.getConnection();
         qr.update(con, sql, 2, 5);

    } catch (Exception e) {
         e.printStackTrace();
      } finally {
         JDBCTools.release(null, null, con);
      }
   }
}

<十五>JDBC_使用 DBUtils 进行更新、查询操作的更多相关文章

  1. 第十五章、python中的进程操作-开启多进程

    目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...

  2. USB学习笔记连载(十五):USB固件更新以及安装驱动

    前几篇博客已经把如何更改固件程序和更改USB驱动名称,那么接下来就要把之前生成的 .iic 文件烧录到EEPROM里面去,实现USB的C2启动(笔者使用的是此类型,C2启动). 打开Cypress U ...

  3. <十六>JDBC_使用 DBUtils 编写通用的DAO

    接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...

  4. [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结

    一个UI前台组件肯定会比较多,我们通常习惯性的使用ID来获取需要操作的组件,但是这种方法是extjs推荐的么?有没有extjs推荐使用的获取组件的方法呢? 目录 目录 extjs的查询组件的API 查 ...

  5. Python学习第二十五课——Mysql (多表查询)

    多表查询: 内连接查询: 首先:创建两个表一个为tableA,一个为tableB,并且插入数据(代码省略) 同时查询两个表的记录: select * from tableA,tableB; 根据tab ...

  6. UWP开发入门(十五)——在FlipView中通过手势操作图片

    本篇的最终目的,是模拟系统的照片APP可以左右滑动,缩放图片的操作.在实现的过程中,我们会逐步分析UWP编写UI的一些思路和技巧. 首先我们先实现一个横向的可以浏览图片的功能,也是大部分APP中的实现 ...

  7. (十五)Hibernate中的多表操作(5):双向多对多

    Hibernate的双向关联. 对象之间可以相互读取.        双向只针对读取的操作.对于增.删除.改的操作没有任何影响. 案例 : 实现双向多对多 MenuBean.java package ...

  8. FreeSql (十五)查询数据

    FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...

  9. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

随机推荐

  1. Angular2 依赖注入

    1. 使用DI 依赖注入是一个很重要的程序设计模式. Angular 有自己的依赖注入框架,离开了它,我们几乎没法构建 Angular 应用.它使用得非常广泛,以至于几乎每个人都会把它简称为 DI. ...

  2. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  3. tableview最后一行显示不全

    最后一行显示不全是因为表格的高度大于了控制view的高度,减小表格的高度小于的等于控制的view的高度即可

  4. 数据结构之列表-javascript实现

    学习数据结构的记录 列表是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合,在这种数据结构上进行的基本操作包括对元素的的查找,插入,和删除 列表的两种主要表现是数组和链表,栈和队 ...

  5. UML大战需求分析——阅读笔记03

    读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图 ...

  6. 使用Jenkins配置Git和Maven的自动化构建

    Jenkins是一个开源的持续集成工具,应用Jenkins搭建持续集成环境,可以进行自动构建.自动编译和部署,非常方便. 在服务器比较少的情况下,Jenkins的优势并不明显,但是随着项目发展,服务器 ...

  7. 【Java EE 学习 81】【CXF框架】【CXF整合Spring】

    一.CXF简介 CXF是Apache公司下的项目,CXF=Celtix+Xfire:它支持soap1.1.soap1.2,而且能够和spring进行快速无缝整合. 另外jax-ws是Sun公司发布的一 ...

  8. Javascript中数组的基本操作

    删除数组指定的某个元素 via首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) ...

  9. Oracle数据库操作分类DDL、DML、DCL、TCL类别清单异同

    DDL Data Definition Language (DDL) statements are used to define the database structure or schema. S ...

  10. Quart.NET实施参考

    参考 1.博客园: http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html 2.官网:http://www.cnblogs.co ...