[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. }  

posted @ 2014-11-06 18:23  lihui1625  阅读(225)  评论(0编辑  收藏  举报