zoukankan      html  css  js  c++  java
  • 使用DbUtils实现增删改查——ResultSetHandler 接口的实现类

            在上一篇文章中《使用DbUtils实现增删改查》,发现运行runner.query()这行代码时。须要自己去处理查询到的结果集,比較麻烦。这行代码的原型是:

    public Object query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

    当中ResultSetHandler是一个接口,实际上。万能的Apache已经为我们提供了众多好用的实现类,如今举比例如以下:

    public class RSHanlderDemo {
    	//ScalarHandler:获取结果集中第一行数据指定列的值,经常使用来进行单值查询
    	@Test
    	public void tes9() throws SQLException{
    		QueryRunner runner = new QueryRunner(new ComboPooledDataSource());
    		Long count = (Long)runner.query("select count(*) from account",new ScalarHandler());
    		System.out.println(count);
    	}
    	
    	//KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里。其key为指定的列。
    	@Test
    	public void tes8() throws SQLException{
    		QueryRunner runner = new QueryRunner(new ComboPooledDataSource());
    		 Map<Object, Map<String, Object>> map = runner.query("select * from account where money>?", new KeyedHandler("id"),500);
    		System.out.println(map);
    	}
    	//ColumnListHandler:将结果集中某一列的数据存放到List中。

    @Test public void tes7() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); List<Object>list = runner.query("select * from account where money>?

    ", new ColumnListHandler(3),500); System.out.println(list); } //MapListHandler:将结果集中的每一行数据都封装到一个Map里。然后再存放到List @Test public void tes6() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); List<Map<String, Object>> list = runner.query("select * from account where money>?", new MapListHandler(),500); System.out.println(list); } //MapHandler:将结果集中的第一行数据封装到一个Map里。key是列名。value就是相应的值。 @Test public void tes5() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); Map<String, Object> map = runner.query("select * from account where money>?", new MapHandler(),500); System.out.println(map); } //BeanListHandler:将结果集中的每一行数据都封装到一个相应的JavaBean实例中。存放到List里。

    @Test public void tes4() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); List<Account>list = runner.query("select * from account where money>?", new BeanListHandler<Account>(Account.class),500); System.out.println(list); } //BeanHandler:将结果集中的第一行数据封装到一个相应的JavaBean实例中。 @Test public void tes3() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); Account acc = runner.query("select * from account where money>?", new BeanHandler<Account>(Account.class),500); System.out.println(acc); } //ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。 @Test public void tes2() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); List<Object[]> list = runner.query("select * from account where money>?

    ", new ArrayListHandler(),500); System.out.println(list); } //ArrayHandler:把结果集中的第一行数据转成对象数组。 @Test public void test1() throws SQLException{ QueryRunner runner = new QueryRunner(new ComboPooledDataSource()); Object[] objs = runner.query("select * from account where money>?", new ArrayHandler(),500); System.out.println(objs); } }


    測试时。能够加断点调试,再运行Debug as JUnit Test。

    总结例如以下:

    ①ArrayHandler:把结果集中的第一行数据转成对象数组。
    ②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:获取结果集中第一行数据指定列的值。经常使用来进行单值查询。

  • 相关阅读:
    动手动脑之异常处理
    git一些概念
    jquery each函数使用
    数据库客户端
    plotly.js
    网站跳转汇总
    jquery 实现间隔运行
    学习 在线调试
    Robot限制字典的key大写的class
    Gerrit 相关
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7041436.html
Copyright © 2011-2022 走看看