zoukankan      html  css  js  c++  java
  • 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接口

  • 相关阅读:
    PO-审批设置
    DIS-接收方式设置入口
    网约车
    汽车租赁
    共享单车
    共享充电宝
    佛教四大名山|道教四大名山|五岳|名山
    我读过的诗词文章书籍
    我看过的电影
    redis异常解决:jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959054.html
Copyright © 2011-2022 走看看