Dbutils:是一个对JDBC进行简单封装的开源工具类库,主要是封装了JDBC的代码,简化开发人员对dao层的操作。 在JDBC编程中,资源的关闭是显式的,极易导致编程出现错误,DBUtils把这些工作抽象出来,使得程序员编程时仅需要关心正真的问题,即对数据库的增删改查。
1、包org.apache.commons.dbutils
接口摘要 ResultSetHandler 将ResultSet转换为别的对象的工具。 RowProcessor 将ResultSet行转换为别的对象的工具。
类摘要 BasicRowProcessor RowProcessor接口的基本实现类。 BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。 DbUtils 一个JDBC辅助工具集合。 ProxyFactory 产生JDBC接口的代理实现。 QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。 QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。 ResultSetIterator 包装结果集为一个迭代器。
2、包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的ResultSetHandler实现类 ColumnListHandler 将ResultSet的一个列转换为List的ResultSetHandler实现类 KeyedHandler 将ResultSet转换为Map的ResultSetHandler实现类 MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类 MapListHandler 将ResultSet转换为List的ResultSetHandler实现类 ScalarHandler 将ResultSet的一个列到一个对象。
3、包org.apache.commons.dbutils.wrappers 添加java.sql类中功能包装类。
类摘要 SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。 StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。
下载好后: 三、基本功能 DbUtils实现增删改查 3.1 增删改:调用Update方法
public static void insert() { try { //新建QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行的Sql语句 String sql = "insert into Student (sname,age)values(?,?)"; //参数,可以使用Object数组,也可以直接写 Object[] params = { "王六", 22 }; //执行Update,返回受影响的记录 Connection conn = getConnection(); int result = qr.update(conn,sql, params); System.out.println(result); conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }3.2查询 3.2.1 使用ArrayHander和ArrayListHandler操作结果集,结果集为空则返回[ ]空集合
public static void QueryByArrayHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from Student "; Connection conn = getConnection(); Object[] result = qr.query(conn, sql, new ArrayHandler()); System.out.println(result); System.out.println(Arrays.toString(result)); conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByArrayListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from Student"; Connection conn = getConnection(); List<Object[]> result = qr.query(conn, sql, new ArrayListHandler()); System.out.println(result); for (Object[] objs : result) { System.out.println(Arrays.toString(objs)); } conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }3.2.2 BeanHandler和BeanListHandler
public static void QueryByBeanHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student where id>10"; Connection conn = getConnection(); Student s = qr.query(conn, sql, new BeanHandler<Student>(Student.class)); System.out.println(s); conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByBeanListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student"; Connection conn = getConnection(); List<Student> stus = qr.query(conn, sql, new BeanListHandler<Student>(Student.class)); for (Student s : stus) { System.out.println(s.ToString()); } conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }3.3.3 ColumnHandler和ScalarHandler
public static void QueryByColumnListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student "; Connection conn = getConnection(); List<String> names = qr.query(conn, sql, new ColumnListHandler<String>("sname")); for (String name : names) { System.out.println(name); } conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByScalarHandler(){ try { QueryRunner qr = new QueryRunner(); String sql = "select count(*) from student "; Connection conn = getConnection(); //new ScalarHandler<Long>() 内部应该是用的Long,所以泛型用Long long num = qr.query(conn, sql, new ScalarHandler<Long>()); System.out.println(num); conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }3.3.4 MapHandler和MapListHandler :返回的Map是有序的
public static void QueryByMapHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student "; Connection conn = getConnection(); Map<String, Object> data = qr.query(conn, sql, new MapHandler()); // Map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap // 继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(data.getClass()); for (String key : data.keySet()) { System.out.println(data.get(key)); } conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByMapListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student "; Connection conn = getConnection(); List<Map<String,Object>> data = qr.query(conn, sql, new MapListHandler()); for (Map<String,Object> map : data) { //map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap //继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(map.getClass()); for(String key:map.keySet()){ System.out.println(map.get(key)); } } conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }