• 使用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:获取结果集中第一行数据指定列的值。经常使用来进行单值查询。

  • 相关阅读:
    这篇是Mark刚写的文档,原文为http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx
    自动加域批处理脚本[转]
    一次moveuser的使用经历[转]
    How to create fully custom Role, User, Event, Resource classes for use with the Security and Scheduler modules
    VBS脚本批处理创建域用户【可自动设置用户密码,创建OU】[转]
    eXpress App Framework Team
    客户端【脚本】自动加入域[转]
    XAF 如何控制自定义按钮的使用权限[转]
    How to make crossthread calls. (多线程操控窗体控件之不可行)
    改变TFS本地映射路径.
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7041436.html
Copyright © 2020-2023  润新知