详解待续。。。

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. 关于httpd服务的安装、配置

    httpd是Apache超文本传输协议(HTTP)服务器的主程序.通常,httpd不应该被直接调用,而应该在linux系统中由 apachectl 调用.接下来我们将了解有关httpd服务的安装与配置 ...

  2. 修改Glassfish默认密码,并允许远程登录

    修改默认密码 1.打开命令提示窗口,进入 glassfish/bin 目录: 2.输入命令 asadmin 进入管理模式: 接着输入: change-admin-password 注意默认密码为空,要 ...

  3. extern

    gcc编译器编译程序有四个阶段,预处理.编译.汇编.链接.预处理阶段会将源代码中的包含的头文件如stdio.h编译进来:编译阶段,gcc首先要检查代码的规范性.是否有语法错误等,以确定代码的实际要做的 ...

  4. Linux下的DOS攻击

    Linux下的DOS攻击 DOS是Denial of service的简称,即拒绝服务,造成Dos攻击行为被称为Dos攻击,其目的是使计算机或网络无法提供正常的服务.最常见的Dos攻击有计算机带宽攻击 ...

  5. October 31st Week 45th Monday 2016

    While there is life there is hope. 一息若存,希望不灭. Go on living even if there is no hope. Knowing is not ...

  6. vmware下centos7桥接模式无法上网

    前一段时间由于想给vm中的centos分配一个独立的IP,就将网络适配器的连接方式由NAT改为桥接,一切顺利. 今天再次开机,IP居然变成了192开头的局域网,并且ping不通外网,经过查找资料,解决 ...

  7. DataTable 只保留想要的几列

    using System; using System.Collections; using System.Configuration; using System.Data; using System. ...

  8. 再见,OI

    你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...

  9. make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

    在ubuntu12.04下编译android时,若出现如此错误,那是因为gcc版本太高. 通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有 ...

  10. [spring源码学习]六、IOC源码-BeanFactory和factory-bean

    一.代码实例 在我们分析spring的IOC源码的时候,发现除了配置标准的bean,并且通过getBean(beanName)的方法获取到一个bean的实例外,似乎还有这不少其他获取的方法,例如在第四 ...