1.JDBC的问题:
1、操作过程复杂,代码操作一个模式,大量的重复。
2、结果集难以处理,需要将拿到的ResultSet一个一个转成JavaBean,后来形成List,太麻烦了。
3、到处都强制检查SQLException,影响代码的美观和可读性。
2.dbutils API
------------------------------------
包org.apache.commons.dbutils
DbUtils是一个为简化JDBC操作的小类库。
接口摘要
ResultSetHandler 将ResultSet转换为别的对象的工具。
RowProcessor 将ResultSet行转换为别的对象的工具。
类摘要
BasicRowProcessor RowProcessor接口的基本实现类。
BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。
DbUtils 一个JDBC辅助工具集合。
ProxyFactory 产生JDBC接口的代理实现。
QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。
QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。
ResultSetIterator 包装结果集为一个迭代器。
------------------------------------
包org.apache.commons.dbutils.handlers
ResultSetHandler接口的实现类
类摘要
AbstractListHandler 将ResultSet转为List的抽象类
ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类
ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类
BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类
BeanListHandler 将ResultSet转换为List<JavaBean>的ResultSetHandler实现类
ColumnListHandler 将ResultSet的一个列转换为List<Object>的ResultSetHandler实现类
KeyedHandler 将ResultSet转换为Map<Map>的ResultSetHandler实现类
MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类
MapListHandler 将ResultSet转换为List<Map>的ResultSetHandler实现类
ScalarHandler 将ResultSet的一个列到一个对象。
------------------------------------
包org.apache.commons.dbutils.wrappers
添加java.sql类中功能包装类。
类摘要
SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。
StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。
3.DEMO
public static void test_insert() throws SQLException { System.out.println("-------------test_insert()-------------"); //创建连接 ,ConnTools为自己定义的connection工具 Connection conn = ConnTools.makeConnection(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); //执行SQL插入 int n = qRunner.update(conn, "insert into user(name,pswd) values(‘iii‘,‘iii‘)"); System.out.println("成功插入" + n + "条数据!"); //关闭数据库连接 DbUtils.closeQuietly(conn); } public static void test_find() throws SQLException { System.out.println("-------------test_find()-------------"); //创建连接 Connection conn = ConnTools.makeConnection(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); //执行SQL查询,并获取结果 List<User> list = (List<User>) qRunner.query(conn, "select id,name,pswd from user", new BeanListHandler(User.class)); //输出查询结果 for (User user : list) { System.out.println(user); } //关闭数据库连接 DbUtils.closeQuietly(conn); }