dbutils开源项目用法

Common Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。


DBUtils包括3个包:
org.apache.commons.dbutils 
org.apache.commons.dbutils.handlers 
org.apache.commons.dbutils.wrappers
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

 

 

org.apache.commons.dbutils
DbUtils 关闭链接等操作
QueryRunner 进行查询的操作

 

org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

 

org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。

 

 

QueryRunner 

构造 QueryRunner : 有两种方法来构造QueryRunner 一种是无参数的 一种是有DataSource类型参数的构造方法 

1:QueryRunner()    2:QueryRunner(javax.sql.DataSource ds) 

这里使用DataSource 来构造它 使用连接池来构造它的好处就是 我们无需管Connection 对象的创建与关闭了,后面调用QueryRunner对象的方法也无需传入Connection对象了 

  1. /**  
  2. * dbcp连接池的用法  
  3. */   
  4. public class DBUtils {   
  5. private static Properties properties;   
  6. private static DataSource dataSource;   
  7. private static Connection conn;   
  8. static {   
  9. try {   
  10. properties = new Properties();   
  11. //载入dbcp的配置文件   
  12. properties.load(DBUtils.class.   
  13. .getResourceAsStream("/dbcpconfig.properties"));   
  14. //创建个BasicDataSourceFactory对象用于创建连接池对象   
  15. BasicDataSourceFactory b = new BasicDataSourceFactory();   
  16. //把properties对象设置给BasicDataSourceFactory   
  17. dataSource = b.createDataSource(properties);   
  18. catch (Exception e) {   
  19. e.printStackTrace();   
  20. }   
  21. }   
  22. public static DataSource getdataSource() {   
  23. return dataSource;   
  24. }   
  25. }   
 

注意:需要导入dbcp连接池的jar commons-dbcp-1.2.1.jar 和所依赖的 commons-pool-1.2.jar 和commons-collections-3.1.jar 

这样我们就可以构造个queryRunner对象了 

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource()); 

 

QueryRunner 主要方法 : 

  1. //更新一列   
  2. queryRunner.update("update Users set username=?,password=? where id = ?"new String[]{"11","22","1"});   
  3. //删除一列   
  4. queryRunner.update("delete from Users where id =?"1);   
 

 


如果要 使用 QueryRunner的查询方法 也就是query()方法的话 那么就需要有对象来接收查询出来的ResultSet 

用什么来接收呢? 要用到 实现ResultSetHandler 接口的类 

1. BeanHandler 返回个entitybean 对象 

  1. //指定返回哪个 entitybean   
  2. ResultSetHandler rsh = new BeanHandler(Users.class);   
  3. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  4. Users users = (Users) queryRunner.query("select * from Users where id=?",2, rsh);   
  5. System.out.println(users.getUsername());   
 

2. BeanListHandler 返回个List List里装的是entitybean 对象 

  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. ResultSetHandler rsh = new BeanListHandler(Users.class);   
  3. List<Users> list = (List) queryRunner.query(   
  4. "select * from Users ", rsh);   
  5. for(Users user:list){   
  6. System.out.println(user.getUsername());   
  7. }   
 

3. ArrayListHandler 返回List 对象 list里装的为Object数组 

  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. // 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象   
  3. ResultSetHandler rsh = new ArrayListHandler();   
  4. //list里装的是对象数组   
  5. List<Object[]> list = (List) queryRunner.query(   
  6. "select * from Users ", rsh);   
  7. for(Object[] user:list) {   
  8. for(Object obj:user)   
  9. {   
  10. System.out.println(obj);   
  11. }   
  12. }   
 

 

4. ColumnListHandler 返回List 对象 
注意: 构造 ColumnListHandler() 对象时候如果 是无参数的话 像这样 ResultSetHandler rsh = new ColumnListHandler(); 查询出来的List 里放的类型为主键的类型 值为主键的值; 

  1. ResultSetHandler rsh = new ColumnListHandler();   
  2. List<Integer> list = (List) queryRunner.query(   
  3. "select * from Users ", rsh);   
  4. //System.out.println(list.get(0).getClass().getSimpleName());   
  5. for(Integer in:list){   
  6. System.out.println(in);   
  7. }   
 

构造 ColumnListHandler() 对象时候如果 是有参数的话 ,像这样 ResultSetHandler rsh = new ColumnListHandler(主键值); 那么查询出来的List 里放的是就是这个主键对应的一行的记录; 

  1. ResultSetHandler rsh = new ColumnListHandler(2);   
  2. List<String> list = (List) queryRunner.query(   
  3. "select * from Users ", rsh);   
  4. for(String in:list){   
  5. System.out.println(in);   
  6. }   
 

 

5. KeyedHandler 根据键返回Map 

  1. ResultSetHandler rsh = new KeyedHandler();   
  2. //map里装的key为主键的值 value 为主键对应的那行记录名称和记录   
  3. Map map = (Map) queryRunner.query(   
  4. "select id,username,password from Users ", rsh);   
  5. //根据主键值出去那一列   
  6. // Map t = (Map) map.get(2);   
  7. System.out.println(map.get(2));   
 


6. MapHandler 根据键返回Map 

  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. ResultSetHandler rsh = new MapHandler();   
  3. Map map = (Map) queryRunner.query(   
  4. "select * from Users ", rsh);   
  5. System.out.println(map);   
 

 

 

下面给出一个完整的例子,建立三个Java文件

 

BeanListExample.java

  1. package com.sy;  
  2. import org.apache.commons.dbutils.DbUtils;  
  3. import org.apache.commons.dbutils.QueryRunner;  
  4. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.SQLException;  
  8. import java.util.List;  
  9. public class BeanListExample {  
  10.     public static void main(String[] args) {  
  11.         Connection conn = null;  
  12.         String url = "jdbc:mysql://localhost:3306/people";  
  13.         String jdbcDriver = "com.mysql.jdbc.Driver";  
  14.         String user = "root";  
  15.         String password = "hicc";  
  16.         DbUtils.loadDriver(jdbcDriver);  
  17.         try {  
  18.             conn = DriverManager.getConnection(url, user, password);  
  19.             QueryRunner qr = new QueryRunner();  
  20.             List results = (List) qr.query(conn, "select id,name from guestbook"new BeanListHandler(Guestbook.class));  
  21.             for (int i = 0; i < results.size(); i++) {  
  22.                 Guestbook gb = (Guestbook) results.get(i);  
  23.                 System.out.println("id:" + gb.getId() + ",name:" + gb.getName());  
  24.             }  
  25.         } catch (SQLException e) {  
  26.             e.printStackTrace();  
  27.         } finally {  
  28.             DbUtils.closeQuietly(conn);  
  29.         }  
  30.     }  
  31. }  
 

Guestbook.java

 

[c-sharp] view plain copy
  1. package com.sy;  
  2. public class Guestbook {  
  3.     private Integer id;  
  4.     private String name;  
  5.     public Integer getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(Integer id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17. }  
 

MapListExample.java

[c-sharp] view plain copy
  1. package com.sy;  
  2. import org.apache.commons.dbutils.DbUtils;  
  3. import org.apache.commons.dbutils.QueryRunner;  
  4. import org.apache.commons.dbutils.handlers.MapListHandler;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.SQLException;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10. public class MapListExample {  
  11.     public static void main(String[] args) {  
  12.         Connection conn = null;  
  13.         String url = "jdbc:mysql://localhost:3306/people";  
  14.         String jdbcDriver = "com.mysql.jdbc.Driver";  
  15.         String user = "root";  
  16.         String password = "hicc";  
  17.         DbUtils.loadDriver(jdbcDriver);  
  18.         try {  
  19.             conn = DriverManager.getConnection(url, user, password);  
  20.             QueryRunner qr = new QueryRunner();  
  21.             List results = (List) qr.query(conn, "select id,name from guestmessage"new MapListHandler());  
  22.             for (int i = 0; i < results.size(); i++) {  
  23.                 Map map = (Map) results.get(i);  
  24.                 System.out.println("id:" + map.get("id") + ",name:" + map.get("name"));  
  25.             }  
  26.         } catch (SQLException e) {  
  27.             e.printStackTrace();  
  28.         } finally {  
  29.             DbUtils.closeQuietly(conn);  
  30.         }  
  31.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils括3个: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成类对象 BeanListHandler :将ResultSet中所有的数据转化成List List中存放的是类对象 ColumnListHandler :将ResultSet中某一列的数据存成List List中存放的是Object对象 KeyedHandler :将ResultSet中存成映射 key为某一列对应为Map Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值