DBUtils学习

来源:互联网 发布:淘宝退货要申请售后吗 编辑:程序博客网 时间:2024/05/20 15:41

一、什么是DBUtils

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能

作用:

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

1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;

2.对于数据表的写操作,也变得很简单(只需写sql语句)

3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。


二、DBUtils的三个核心对象

1、QueryRunner类

QueryRunner中提供对sql语句操作的API.它主要有三个方法
(1)query() 用于执行select
(2)0update() 用于执行insert update delete
(3)batch() 批处理

2、ResultSetHandler接口

用于定义select操作后,怎样封装结果集.(后面将详细介绍)

3、DbUtils类

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



三、DBUtils的使用介绍

1、使用步骤:

(1)导包



(2)创建QueryRunner对象

(3)使用query方法执行select语句

(4)使用ResultSeethe封装结果集

(5)使用DbUtils类释放资源


2、QueryRunner学习

(1)构造方法:


(2)还用QueryRunner对数据库操作



3、ResultSetHandler接口学习

下面为继承了该接口的类。

如果已知数据库表为:



1、ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

@Test//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]public void tese1() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());Object[] arr  = qr.query("select * from testone", new ArrayHandler());for (Object o : arr) {System.out.println(o);}}




2、ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

@Test//ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中public void tese2() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());List<Object[]> query = qr.query("select * from testone", new ArrayListHandler());for (Object[] os : query) {for (Object o : os) {System.out.println(o);}System.out.println("--------------");}}
运行结果图:



3、ColumnListHandler:取某一列的数据。封装到List中。

@Test //ColumnListHandler:取某一列的数据。封装到List中。public void tese3() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());List<Object> list = qr.query("select name,money from testone", new ColumnListHandler(1));for (Object o : list) {System.out.println(o);}}
运行结果图:


4、KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

@Test //KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。public void tese4() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());//大Map的key是表中的某列数据,小Map中的key是表的列名,所以大Map的key是Object类型,小Map的key是String类型Map<Object,Map<String,Object>> map = qr.query("select * from testone", new KeyedHandler(1));for (Map.Entry<Object, Map<String,Object>> m : map.entrySet()) {System.out.println(m.getKey());//大Map中key值就是id列的值for (Map.Entry<String, Object> mm : m.getValue().entrySet()) {System.out.println(mm.getKey()+"\t"+mm.getValue());//取出小Map中的列名和列值}System.out.println("---------------------");}}
运行结果图:




5、MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

@Test//MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中public void tese5() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());Map<String,Object> map = qr.query("select * from testone where id=?", new MapHandler(),2);for (Map.Entry<String, Object> m : map.entrySet()) {System.out.println(m.getKey()+"\t"+m.getValue());}}

运行结果图:




6、MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

@Test//MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中public void tese6() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());List<Map<String,Object>> list = qr.query("select * from users", new MapListHandler());for (Map<String, Object> map : list) {for (Map.Entry<String, Object> m : map.entrySet()) {System.out.println(m.getKey()+"\t"+m.getValue());}System.out.println("---------------");}}
运行结果图:




7、ScalarHandler:适合取单行单列数据

@Test //ScalarHandler:适合取单行单列数据public void tese7() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());Object o = qr.query("select count(*) from users", new ScalarHandler(1));System.out.println(o.getClass().getName());}
运行结果图:



8、BeanHandler

@Test //BeanHandler:适合取单行单列数据public void tese8() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());User user = qr.query("select * from users where id=?", new BeanHandler<User>(User.class),1);System.out.println(user);}
运行结果图:



9、BeanListHandler

@Test //BeanListHandler public void tese9() throws SQLException{QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());List<User> list = qr.query("select * from users where id=?", new BeanListHandler<User>(User.class),1);System.out.println(list.size());}
运行结果图:



四、总结

以上便是我对于DBUtils类的学习,如果其中有任何错误,请提出,谢谢!


0 0
原创粉丝点击