博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dbutils开源项目用法
阅读量:5064 次
发布时间:2019-06-12

本文共 8759 字,大约阅读时间需要 29 分钟。

dbutils开源项目用法

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[size=large]
dbutils 开源项目用法:
项目地址:http://commons.apache.org/dbutils/
最新版本为 1.1

英文文档中这样写到:

DbUtils is a very small library of classes so it won't take long to go throughthe javadocs for each class.
The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler.
You don't need to know about any other DbUtils classes to benefit from usingthe library.
大概意思是: DbUtils 是一个非常小的类库 因此你不需要花费太长的时间去研究javadocs
    它的核心接口是 QueryRunner 和ResultSetHandler
    你不需要关心其他DbUtils的类如何使用
-------------------------------------------------------------------------------------------------------------------------
QueryRunner
构造 QueryRunner :
QueryRunner()   
QueryRunner(javax.sql.DataSource ds)  
有两种方法来构造QueryRunner 一种是无参数的 一种是有DataSource类型参数的构造方法这里使用DataSource来构造它   使用连接池来构造它的好处就是 我们无需管Connection对象的创建与关闭了后面调用QueryRunner对象的方法也无需传入Connection对象了那我们就要用到另外一个开源数据库连接池组件dbcp以下为dbcp的用法:

 

Java代码

 public class DBUtils {   

  private static Properties properties;  

  private static DataSource dataSource;  

  private static Connection conn;  

  static {   

  try {   

  properties = new Properties();  

  //载入dbcp的配置文件  

  properties.load(DBUtils.class..getResourceAsStream("/dbcpconfig.properties"));  

  

//创建个BasicDataSourceFactory对象用于创建连接池对象  

  

BasicDataSourceFactory b = new BasicDataSourceFactory();  

 //把properties对象设置给BasicDataSourceFactory  

 dataSource = b.createDataSource(properties);  

 

} catch (Exception e) {   

  e.printStackTrace();   

  }   

  }   

  

 

public static DataSource getdataSource() {  

  return dataSource;   

  }   

  }  

 

 

public class DBUtils {

private static Properties properties;

private static DataSource dataSource;

 private static Connection conn;

 static {

try {

properties = new Properties();

//载入dbcp的配置文件

 properties.load(DBUtils.class..getResourceAsStream("/dbcpconfig.properties"));

 //创建个BasicDataSourceFactory对象用于创建连接池对象

BasicDataSourceFactory b = new BasicDataSourceFactory();

//把properties对象设置给BasicDataSourceFactory

 dataSource = b.createDataSource(properties);

} catch (Exception e) {

e.printStackTrace();

}

}

public static DataSource getdataSource() {

 

return dataSource;

 

}

 

}

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

Java代码

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

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

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

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

QueryRunner 主要方法 :

Java代码

//更新一列   

   queryRunner.update("update Users set username=?,password=? where id = ?", new String[]{"11","22","1"});  

  

//删除一列   

       queryRunner.update("delete from Users where id =?", 1);  

//更新一列

   queryRunner.update("update Users setusername=?,password=? where id = ?", newString[]{"11","22","1"});

 

//删除一列

      queryRunner.update("delete from Users where id =?", 1);

--------------------------------------------------------------------------------------------------------------
如果要 使用 QueryRunner的查询方法 也就是query()方法的话那么就需要有对象来接收查询出来的ResultSet
用什么来接收呢? 要用到 实现ResultSetHandler接口的类
1. BeanHandler    返回个entitybean对象

Java代码

//指定返回哪个 entitybean  

ResultSetHandler rsh = new BeanHandler(Users.class);  

  

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

  

Users users = (Users) queryRunner.query("select * from Users where id=?",2, rsh);  

  

System.out.println(users.getUsername());  

//指定返回哪个 entitybean

ResultSetHandler rsh = new BeanHandler(Users.class);

 

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

 

Users users = (Users) queryRunner.query("select * from Userswhere id=?",2, rsh);

 

System.out.println(users.getUsername());

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

Java代码

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

  

ResultSetHandler rsh = new BeanListHandler(Users.class);  

  

List<Users> list = (List) queryRunner.query(  

  

"select * from Users ", rsh);  

  

for(Users user:list){   

  

System.out.println(user.getUsername());   

  

}  

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

 

ResultSetHandler rsh = new BeanListHandler(Users.class);

 

List<Users> list = (List) queryRunner.query(

 

"select * from Users ", rsh);

 

for(Users user:list){

 

System.out.println(user.getUsername());

 

}

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

Java代码

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

  

// 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象  

ResultSetHandler rsh = new ArrayListHandler();  

  

//list里装的是对象数组   

List<Object[]> list = (List) queryRunner.query(  

  

"select * from Users ", rsh);  

  

for(Object[] user:list) {   

  

for(Object obj:user)   

  

{   

  

  

System.out.println(obj);   

  

}   

  

}  

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

 

// 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象

ResultSetHandler rsh = new ArrayListHandler();

 

//list里装的是对象数组

List<Object[]> list = (List) queryRunner.query(

 

"select * from Users ", rsh);

 

for(Object[] user:list) {

 

for(Object obj:user)

 

{

 

 

System.out.println(obj);

 

}

 

}

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

Java代码

ResultSetHandler rsh = new ColumnListHandler();  

  List<Integer> list = (List) queryRunner.query(  "select * from Users ", rsh);  

  //System.out.println(list.get(0).getClass().getSimpleName());  

for(Integer in:list){   

  System.out.println(in);   

    }  

ResultSetHandler rsh = new ColumnListHandler();

List<Integer> list = (List) queryRunner.query("select *from Users ", rsh);

//System.out.println(list.get(0).getClass().getSimpleName());

 for(Integer in:list){

System.out.println(in);

   }

 

 

 

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

ResultSetHandler rsh = new ColumnListHandler(2);  

List<String> list = (List) queryRunner.query(  

  "select * from Users ", rsh);  

  for(String in:list){   

  System.out.println(in);   

  }  

ResultSetHandler rsh = new ColumnListHandler(2);

List<String> list = (List) queryRunner.query("select *from Users ", rsh);

for(String in:list){

System.out.println(in);

}

-------------------------------------------------------------------------------------------------------------
   5. KeyedHandler 根据键返回Map
Java代码

ResultSetHandler rsh = new KeyedHandler();  

  //map里装的key为主键的值   value 为主键对应的那行记录名称和记录  

  Map map   =   (Map) queryRunner.query("select id,username,password from Users ", rsh);  

  //根据主键值出去那一列    

  // Map t = (Map) map.get(2);  

 System.out.println(map.get(2));  

ResultSetHandler rsh = new KeyedHandler();

//map里装的key为主键的值  value 为主键对应的那行记录名称和记录

Map map   =   (Map)queryRunner.query("select id,username,password from Users ", rsh);

//根据主键值出去那一列

// Map t = (Map) map.get(2);

 System.out.println(map.get(2));

---------------------------------------------------------------------------------------------------------------
6. MapHandler 根据键返回Map

Java代码

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

ResultSetHandler rsh = new MapHandler();  

Map map   =   (Map) queryRunner.query("select * from Users ", rsh);   System.out.println(map);

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

 ResultSetHandler rsh = new MapHandler();

Map map   =   (Map) queryRunner.query(

 "select * from Users ", rsh);

System.out.println(map);

---------------------------------------------------------------------------------------------------------------

7. ScalarHandler 根据键返回第一行记录

Java代码

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

  

// 这样就会返回第一行记录名字为username的值  

ResultSetHandler rsh = new ScalarHandler("username");  

  

//这的类型根据表里数据的类型而定如果上面

 ResultSetHandler rsh = new ScalarHandler("username");

//取出来的类型为int的话 那么这里也必须由int 来接收  

String result = (String) queryRunner.query("select * from Users where id=99 ",   rsh);   

System.out.println(result);  

 

转载于:https://www.cnblogs.com/liaoshiyong/archive/2013/06/08/3150971.html

你可能感兴趣的文章
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>
SpringMVC的@Validated校验注解使用方法
查看>>
Python之os模块
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
【蓝桥杯】PREV-21 回文数字
查看>>
html 简介
查看>>
python使用上下文对代码片段进行计时,非装饰器
查看>>
【bzoj5099】[POI2018]Pionek 双指针法
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
选择器
查看>>
Mysql与Oracle 的对比
查看>>
mySQL 教程 第7章 存储过程和函数
查看>>
OGG同步Oracle到Kafka(Kafka Connect Handler)
查看>>
算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
查看>>
idea的maven项目无法引入junit
查看>>
jquery实现限制textarea输入字数
查看>>