• [Apache commons系列]DBUtils 示例代码


    inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish )。

      DbUtils是一个小型的类库,这里通过具体实例来说明如何使用DbUtils。示例分为3个类:DbUtilsExample演示了如何使用DbUtils 类;QueryRunnerExample 演示了如何使用QueryRunner 、ResultSetHandler ;User 类为一个JavaBean,对应于数据库中的表格。示例采用MySQL为数据库,使用JDBC4.0驱动(最大的区别就是不需要写Class.forName().newInstance() )。

    依赖包:

    • commons-dbcp-1.2.2.jar:提供数据库连接池
    • commons-dbutils-1.3.jar:DbUtils包
    • commons-lang-2.4.jar:提供常用的工具方法
    • commons-pool-1.5.3.jar:提供DBCP对象池化机制
    • mysql-connector-java-5.1.10-bin.jar:MySQL JDBC4.0驱动

    建表语句:

     

    [java] view plaincopy
     
    1. DROP TABLE IF EXISTS `user`;  
    2. CREATE TABLE  `user` (  
    3.   `USERNAME` varchar(30) NOT NULL,  
    4.   `PASSWORDHASH` varchar(256),  
    5.   PRIMARY KEY (`USERNAME`),  
    6.   KEY `USERNAME` (`USERNAME`)  
    7. );  

    DbUtilsExample.java :

     

    [java] view plaincopy
     
    1. import java.sql.Connection;  
    2. import java.sql.DriverManager;  
    3. import java.sql.PreparedStatement;  
    4. import java.sql.ResultSet;  
    5. import java.sql.SQLException;  
    6. import java.sql.Statement;  
    7. import org.apache.commons.dbutils.DbUtils;  
    8. public class DbUtilsExample {  
    9.     public static void main(String[] args) {  
    10.         String url = "jdbc:mysql://127.0.0.1:3306/test";  
    11.         String user = "test";  
    12.         String password = "test";  
    13.         Connection conn = null;  
    14.         Statement stmt = null;  
    15.         ResultSet rs = null;  
    16.         try {  
    17.             conn = DriverManager.getConnection(url, user, password);  
    18.             stmt = conn.createStatement();  
    19.             stmt  
    20.                     .executeUpdate("INSERT INTO user (USERNAME, PASSWORDHASH) values ('testUser', '123456')");  
    21.             DbUtils.closeQuietly(stmt);  
    22.             DbUtils.commitAndCloseQuietly(conn);  
    23.         } catch (SQLException ex) {  
    24.             DbUtils.printStackTrace(ex);  
    25.             DbUtils.rollbackAndCloseQuietly(conn);  
    26.         }  
    27.         PreparedStatement psmt = null;  
    28.         try {  
    29.             conn = DriverManager.getConnection(url, user, password);  
    30.             psmt = conn.prepareStatement("SELECT USERNAME, PASSWORDHASH FROM user");  
    31.             rs = psmt.executeQuery();  
    32.             while (rs.next()) {  
    33.                 System.out.println(rs.getString(1) + "/t" + rs.getString(2));  
    34.             }  
    35.         } catch (SQLException ex) {  
    36.             DbUtils.printStackTrace(ex);  
    37.         } finally {  
    38.             DbUtils.closeQuietly(conn, psmt, rs);  
    39.         }  
    40.         try {  
    41.             conn = DriverManager.getConnection(url, user, password);  
    42.             stmt = conn.createStatement();  
    43.             stmt.executeUpdate("DELETE FROM user WHERE USERNAME='testUser'");  
    44.             DbUtils.closeQuietly(stmt);  
    45.         } catch (SQLException ex) {  
    46.             DbUtils.printStackTrace(ex);  
    47.         } finally {  
    48.             DbUtils.printWarnings(conn);  
    49.             DbUtils.closeQuietly(conn);  
    50.         }  
    51.     }  
    52. }  

    QueryRunnerExample.java :

     

    [java] view plaincopy
     
    1. import static java.lang.System.out;  
    2. import java.sql.Connection;  
    3. import java.sql.PreparedStatement;  
    4. import java.sql.SQLException;  
    5. import java.util.Arrays;  
    6. import java.util.List;  
    7. import java.util.Map;  
    8. import javax.sql.DataSource;  
    9. import org.apache.commons.dbcp.BasicDataSource;  
    10. import org.apache.commons.dbutils.DbUtils;  
    11. import org.apache.commons.dbutils.QueryRunner;  
    12. import org.apache.commons.dbutils.handlers.ArrayHandler;  
    13. import org.apache.commons.dbutils.handlers.ArrayListHandler;  
    14. import org.apache.commons.dbutils.handlers.BeanHandler;  
    15. import org.apache.commons.dbutils.handlers.BeanListHandler;  
    16. import org.apache.commons.dbutils.handlers.ColumnListHandler;  
    17. import org.apache.commons.dbutils.handlers.KeyedHandler;  
    18. import org.apache.commons.dbutils.handlers.MapHandler;  
    19. import org.apache.commons.dbutils.handlers.MapListHandler;  
    20. import org.apache.commons.dbutils.handlers.ScalarHandler;  
    21. import org.apache.commons.lang.StringUtils;  
    22. public class QueryRunnerExample {  
    23.     public static void main(String[] args) throws SQLException {  
    24.         QueryRunnerExample example = new QueryRunnerExample();  
    25.         example.batch();  
    26.         example.fillStatement();  
    27.         example.query();  
    28.         example.update();  
    29.         example.closeDataSource();  
    30.     }  
    31.     private DataSource dataSource = null;  
    32.     private QueryRunner runner = null;  
    33.     public QueryRunnerExample() {  
    34.         initDataSource();  
    35.         runner = new QueryRunner(dataSource);  
    36.     }  
    37.     private void batch() {  
    38.         String sql = "INSERT INTO user (USERNAME, PASSWORDHASH) values (?, ?)";  
    39.         try {  
    40.             out.println("/n" + StringUtils.center("Test QueryRunner batch"80'*'));  
    41.             int[] result = runner.batch(sql, new Object[][] { { "user1""pwd1" },  
    42.                     { "user2""pwd2" }, { "user3""pwd3" }, { "user4""pwd4" } });  
    43.             out.printf("运行结果:%s/n", Arrays.toString(result));  
    44.         } catch (SQLException ex) {  
    45.             DbUtils.printStackTrace(ex);  
    46.         }  
    47.     }  
    48.     private void closeDataSource() throws SQLException {  
    49.         ((BasicDataSource) dataSource).close();  
    50.     }  
    51.     private void fillStatement() throws SQLException {  
    52.         String sql = "INSERT INTO user (USERNAME, PASSWORDHASH) VALUES (?, ?)";  
    53.         Connection conn = null;  
    54.         try {  
    55.             out.println("/n" + StringUtils.center("Test QueryRunner fillStatement"80'*'));  
    56.             conn = dataSource.getConnection();  
    57.             PreparedStatement psmt = conn.prepareStatement(sql);  
    58.             runner.fillStatementWithBean(psmt, new User("testUser5""pwd5"), "userName",  
    59.                     "passwordHash");  
    60.             out.println(psmt.executeUpdate());  
    61.         } catch (SQLException ex) {  
    62.             DbUtils.printStackTrace(ex);  
    63.         } finally {  
    64.             DbUtils.commitAndCloseQuietly(conn);  
    65.         }  
    66.     }  
    67.     private DataSource initDataSource() {  
    68.         if (dataSource == null) {  
    69.             BasicDataSource basicDs = new BasicDataSource();  
    70.             basicDs.setUrl("jdbc:mysql://127.0.0.1:3306/test");  
    71.             basicDs.setUsername("test");  
    72.             basicDs.setPassword("test");  
    73.             this.dataSource = basicDs;  
    74.         }  
    75.         return dataSource;  
    76.     }  
    77.     private void query() throws SQLException {  
    78.         out.println("/n" + StringUtils.center("Test QueryRunner query"80'*'));  
    79.         String sql = "SELECT * FROM user WHERE USERNAME LIKE ?";  
    80.         out.println("1.Test QueryRunner query, ArrayHandler");  
    81.         //把ResultSet第一行包装成Object[]  
    82.         Object[] r1 = runner.query(sql, new ArrayHandler(), "user%");  
    83.         out.println("  " + Arrays.deepToString(r1));  
    84.         out.println("2.Test QueryRunner query, ArrayListHandler");  
    85.         //把ResultSet包装成List<Object[]>  
    86.         List<Object[]> r2 = runner.query(sql, new ArrayListHandler(), "user%");  
    87.         out.println("  " + Arrays.deepToString(r2.toArray()));  
    88.         out.println("3.Test QueryRunner query, BeanHandler");  
    89.         //把ResultSet第一行包装成一个JavaBean  
    90.         User r3 = runner.query(sql, new BeanHandler<User>(User.class), "user%");  
    91.         out.println("  " + r3.toString());  
    92.         out.println("4.Test QueryRunner query, BeanListHandler");  
    93.         //把ResultSet第一行包装成一个List<JavaBean>;  
    94.         List<User> r4 = runner.query(sql, new BeanListHandler<User>(User.class), "user%");  
    95.         out.println("  " + Arrays.deepToString(r4.toArray()));  
    96.         out.println("5.Test query, ColumnListHandler");  
    97.         //抽取ResultSet指定的列,以List<Object>对象的形式返回,默认第一列  
    98.         List<Object> r5 = runner.query(sql, new ColumnListHandler(2), "user%");  
    99.         out.println("  " + Arrays.deepToString(r5.toArray()));  
    100.         out.println("6.Test QueryRunner query, KeyedHandler");  
    101.         //包装ResultSet,以Map<Object,Map<String,Object>>对象形式返回,第一个Object是指定的列值,第二个Map中String是列名且对大小写不敏感  
    102.         Map<Object, Map<String, Object>> r6 = runner.query(sql, new KeyedHandler(2), "user%");  
    103.         out.println("  " + r6.toString());  
    104.         out.println("7.Test QueryRunner query, MapHandler");  
    105.         //把ResultSet第一行包装成Map<String, Object>,key对大小写不敏感  
    106.         Map<String, Object> r7 = runner.query(sql, new MapHandler(), "user%");  
    107.         out.println("  " + r7.toString());  
    108.         out.println("8.Test QueryRunner query, MapListHandler");  
    109.         //把ResultSet包装成List<Map<String,Object>>>,Map的key对大小写不敏感  
    110.         List<Map<String, Object>> r8 = runner.query(sql, new MapListHandler(), "user%");  
    111.         out.println("  " + r8.toString());  
    112.         out.println("9.Test QueryRunner query, ScalarHandler");  
    113.         //抽取ResultSet第一行指定列,以Object对象形式返回  
    114.         Object r9 = runner.query(sql, new ScalarHandler("passwordhash"), "user%");  
    115.         out.println("  " + r9.toString());  
    116.     }  
    117.     private void update() {  
    118.         String sql = "DELETE FROM user WHERE PASSWORDHASH LIKE ?";  
    119.         try {  
    120.             out.println("/n" + StringUtils.center("Test QueryRunner update"80'*'));  
    121.             out.println(runner.update(sql, "pwd%"));  
    122.         } catch (SQLException ex) {  
    123.             DbUtils.printStackTrace(ex);  
    124.         }  
    125.     }  
    126. }  
  • 相关阅读:
    【译】Using .NET for Apache Spark to Analyze Log Data
    边缘缓存模式(Cache-Aside Pattern)
    GUID做主键真的合适吗
    在Java大环境下.NET程序员如何夺得一线生机
    板子
    P1525 关押罪犯 (并查集 / 二分图)| 二分图伪码
    算法学习笔记:匈牙利算法
    POJ
    19级暑假第三场训练赛
    POJ 1011 Sticks​ (DFS + 剪枝)
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276386.html
Copyright © 2020-2023  润新知