commons.dbutils1.2介绍及使用

一、结构介绍

高层结构图:

wrappers包:

handlers包(部分):

 

二、功能介绍

commons.dbutils是一个对JDBC操作进行封装的类集,其有如下几个优点:

(1)没有可能的资源泄漏,避免了繁锁的JDBC代码

(2)代码更整洁

(3)从ResultSet自动生成JavaBeans属性

(4)无其他依赖包

 

三、基本使用

基本用到的类有:QueryRunner、ResultSetHandler及其子类等

QueryRunner -- 执行查询的类,可以执行SELECT、INSERT、UPDATE、DELETE等语句,QueryRunner用ResultSetHandler的子类来处理ResultSet并返回结果;而包提供的ResultSetHandler子类使用RowProcessor的子类来处理ResultSet中的每一行;RowProcessor的默认实现为BasicRowProcessor;BeanProcessor不是RowProcessor,可以看作一个工具类

 

ResultHandler及其子类 -- 实现了Object handle(ResultSet rs) throws SQLException方法

AbstractListHandler -- 返回多行List的抽象类

ArrayHandler --  返回一行的Object[]

ArrayListHandler -- 返回List,每行是Object[]

BeanHandler -- 返回第一个Bean对象

BeanListHandler -- 返回List,每行是Bean

ColumnListHandler -- 返回一列的List

KeyedHandler -- 返回Map,具体见代码

MapHandler -- 返回单个Map

MapListHandler -- 返回List,每行是Map

ScalarHandler -- 返回列的头一个值

代码:

[java] view plaincopy
  1. //建表语句  
  2. DROP TABLE IF EXISTS `test`.`user`;  
  3. CREATE TABLE  `test`.`user` (  
  4.   `name` varchar(10) DEFAULT NULL,  
  5.   `password` varchar(10) DEFAULT NULL  
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;  
  7. 表中数据  
  8. 'user1''pwd1'  
  9. 'user2''pwd2'  
  10. //User类  
  11. public class User {  
  12.     private String name;  
  13.     private String pwd;  
  14.     public User(){  
  15.     }  
  16.     public void setName(String val) {  
  17.         this.name = val;  
  18.     }  
  19.     public void setPassword(String val) {  
  20.         this.pwd = val;  
  21.     }  
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.     public String getPassword() {  
  26.         return pwd;  
  27.     }  
  28. }  

[java] view plaincopy
  1. package dbutiltest;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.SQLException;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import org.apache.commons.dbutils.DbUtils;  
  8. import org.apache.commons.dbutils.QueryRunner;  
  9. import org.apache.commons.dbutils.ResultSetHandler;  
  10. import org.apache.commons.dbutils.handlers.ArrayHandler;  
  11. import org.apache.commons.dbutils.handlers.ArrayListHandler;  
  12. import org.apache.commons.dbutils.handlers.BeanHandler;  
  13. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  14. import org.apache.commons.dbutils.handlers.ColumnListHandler;  
  15. import org.apache.commons.dbutils.handlers.KeyedHandler;  
  16. import org.apache.commons.dbutils.handlers.MapListHandler;  
  17. public class TestDbUtils {  
  18.       
  19.     static {  
  20.         try {  
  21.             Class.forName("org.gjt.mm.mysql.Driver");  
  22.         } catch (ClassNotFoundException e) {  
  23.             e.printStackTrace();  
  24.             System.exit(1);  
  25.         }  
  26.     }  
  27.       
  28.     public Connection getConnection() {  
  29.         Connection conn = null;  
  30.         try {  
  31.             conn = DriverManager.getConnection(  
  32.                     "jdbc:mysql://localhost:3306/test""root""pwd");  
  33.         } catch (SQLException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.         return conn;  
  37.     }  
  38.       
  39.     public static void main(String[] args) {  
  40.         TestDbUtils u = new TestDbUtils();  
  41.         u.testArrayHandler();  
  42.         u.testArrayListHandler();  
  43.         u.testBeanListHandler();  
  44.         u.testMapListHandler();  
  45.         u.testColumnListHandler();  
  46.         u.testNonQuery();  
  47.     }  
  48.       
  49.     public void testArrayHandler() {  
  50.         System.out.println("----testArrayHandler----");  
  51.         String sql = "select * from user";  
  52.         ResultSetHandler handler = new ArrayHandler();  
  53.         QueryRunner query = new QueryRunner();  
  54.         Connection conn = null;  
  55.         try {  
  56.             conn = getConnection();  
  57.             Object[] arr = (Object[])query.query(conn, sql, handler);  
  58.             for (int i = 0; i < arr.length; i++) {  
  59.                 System.out.println(arr[i].toString());  
  60.             }  
  61.         } catch (SQLException e) {  
  62.             e.printStackTrace();  
  63.         } finally {  
  64.             try {  
  65.                 DbUtils.close(conn);  
  66.             } catch (SQLException e) {  
  67.                 // ignore  
  68.             }  
  69.         }  
  70.           
  71.     }  
  72.       
  73.     public void testArrayListHandler() {  
  74.         System.out.println("----testArrayListHandler----");  
  75.         String sql = "select * from user";  
  76.         ResultSetHandler handler = new ArrayListHandler();  
  77.         QueryRunner query = new QueryRunner();  
  78.         Connection conn = null;  
  79.         try {  
  80.             conn = getConnection();  
  81.             List list = (List)query.query(conn, sql, handler);  
  82.             for (int i = 0; i < list.size(); i++) {  
  83.                 Object[] arr = (Object[])list.get(i);  
  84.                 for (int j = 0; j < arr.length; j++) {  
  85.                     System.out.print(arr[j] + "  ");  
  86.                 }  
  87.                 System.out.println();  
  88.             }  
  89.         } catch (SQLException e) {  
  90.             e.printStackTrace();  
  91.         } finally {  
  92.             try {  
  93.                 DbUtils.close(conn);  
  94.             } catch (SQLException e) {  
  95.                 // ignore  
  96.             }  
  97.         }  
  98.           
  99.     }  
  100.       
  101.     public void testBeanListHandler() {  
  102.         System.out.println("----testBeanListHandler----");  
  103.         String sql = "select * from user where name=?";  
  104.         Object[] params = new Object[]{"user1"};  
  105.         ResultSetHandler handler = new BeanListHandler(User.class);  
  106.         QueryRunner query = new QueryRunner();  
  107.         Connection conn = null;  
  108.         try {  
  109.             conn = getConnection();  
  110.             List list = (List)query.query(conn, sql, params, handler);  
  111.             for (int i = 0; i < list.size(); i++) {  
  112.                 User user = (User)list.get(i);  
  113.                 System.out.println(user.getName() + "  " + user.getPassword());  
  114.             }  
  115.         } catch (SQLException e) {  
  116.             e.printStackTrace();  
  117.         } finally {  
  118.             try {  
  119.                 DbUtils.close(conn);  
  120.             } catch (SQLException e) {  
  121.                 // ignore  
  122.             }  
  123.         }  
  124.     }  
  125.       
  126.     public void testMapListHandler() {  
  127.         System.out.println("----testMapListHandler----");  
  128.         String sql = "select * from user where name=?";  
  129.         Object[] params = new Object[]{"user1"};  
  130.         ResultSetHandler handler = new MapListHandler();  
  131.         QueryRunner query = new QueryRunner();  
  132.         Connection conn = null;  
  133.         try {  
  134.             conn = getConnection();  
  135.             List list = (List)query.query(conn, sql, params, handler);  
  136.             for (int i = 0; i < list.size(); i++) {  
  137.                 Map user = (Map)list.get(i);  
  138.                 System.out.println(user.get("name") + "  " + user.get("password"));  
  139.             }  
  140.         } catch (SQLException e) {  
  141.             e.printStackTrace();  
  142.         } finally {  
  143.             try {  
  144.                 DbUtils.close(conn);  
  145.             } catch (SQLException e) {  
  146.                 // ignore  
  147.             }  
  148.         }  
  149.     }  
  150.       
  151.     public void testColumnListHandler() {  
  152.         System.out.println("----testColumnListHandler----");  
  153.         String sql = "select * from user";  
  154.         ResultSetHandler handler = new ColumnListHandler("name");  
  155.         QueryRunner query = new QueryRunner();  
  156.         Connection conn = null;  
  157.         try {  
  158.             conn = getConnection();  
  159.             List list = (List)query.query(conn, sql, handler);  
  160.             for (int i = 0; i < list.size(); i++) {  
  161.                 System.out.println(list.get(i));  
  162.             }  
  163.         } catch (SQLException e) {  
  164.             e.printStackTrace();  
  165.         } finally {  
  166.             try {  
  167.                 DbUtils.close(conn);  
  168.             } catch (SQLException e) {  
  169.                 // ignore  
  170.             }  
  171.         }  
  172.     }  
  173.       
  174.     public void testKeyedHandler() {  
  175.         System.out.println("----testKeyedHandler----");  
  176.         String sql = "select * from user";  
  177.         ResultSetHandler handler = new KeyedHandler("name");  
  178.         QueryRunner query = new QueryRunner();  
  179.         Connection conn = null;  
  180.         try {  
  181.             conn = getConnection();  
  182.             Map map = (Map)query.query(conn, sql, handler);  
  183.             Map user = (Map)map.get("user2");  
  184.             System.out.println(user.get("password"));  
  185.         } catch (SQLException e) {  
  186.             e.printStackTrace();  
  187.         } finally {  
  188.             try {  
  189.                 DbUtils.close(conn);  
  190.             } catch (SQLException e) {  
  191.                 // ignore  
  192.             }  
  193.         }  
  194.     }  
  195.       
  196.     public void testNonQuery() {  
  197.         System.out.println("----testNonQuery----");  
  198.         String sql = "insert into `user` values('user_test','pwd_test')";  
  199.         QueryRunner query = new QueryRunner();  
  200.         Connection conn = null;  
  201.         try {  
  202.             conn = getConnection();  
  203.             query.update(conn, sql);  
  204.         } catch (SQLException e) {  
  205.             e.printStackTrace();  
  206.         } finally {  
  207.             try {  
  208.                 DbUtils.close(conn);  
  209.             } catch (SQLException e) {  
  210.                 // ignore  
  211.             }  
  212.         }  
  213.     }  
  214. }  

 

 

关于wrappers包:

在新建 QueryRunner时,覆盖父类的方法wrap

[java] view plaincopy
  1. QueryRunner query = new QueryRunner() {  
  2.             protected ResultSet wrap(ResultSet rs) {  
  3.                 return StringTrimmedResultSet.wrap(rs);  
  4.             }  
  5.         };  

 

四、扩展

1.RowProcessor接口

2.ResultSetHandler接口

原文地址:https://www.cnblogs.com/daichangya/p/12959054.html