是一个apache推出的对JDBC的简单封装的工具类库,提供了通用的JDBC方法 需要引入common-dbutils-1.jar
1.QueryRunner类
有方法close()可关闭c,s,r
closeQuietly()关闭的同时会隐藏一些SQLException
commitAndClose(Connection c)提交事务,关闭连接
commitAndCloseQuietly(Connection c)提交事务,关闭连接,并且不抛出sql异常
rollback(Connection c)
rollbackAndClose(Connection c)
rollbackAndCloseQuietly(Connection c)
loadDriver(驱动名)可以直接装载并注册JDBC驱动
T query(Connection c,String sql,ResultHandler rh,Object… params)ResultHandler 查询的时候如果查一条则返回bean,查询多个返回list,查询一个值返回Object,而这个可以根据不同的结果封装成不同的结果
int update(Connection c,String sql,Object… params) 与自己写的类似。
2.ResultHandler接口
传入不同的接口实现类来处理不同的查询结果
比如说实现类BeanHandler 会把结果集的第一条封装为一个Bean类
BeanListHandler 把结果集封装为一个List[Bean]
ScalarHandler 就返回一个值(结果集的第一行第一列)
用的时候连接数据库还是用连接池吧,获得c
直接QueryRunner qr=new QueryRunner();
qr.update(c,“add xxxx”,1,“sss”)
关闭时用连接池就可以。
qr.query(c,“select xxx”,new BeanHandler(User.class),1) 记得这里的User需要有一个无参的构造方法,因为它是通过反射来映射的,再通过属性名映射
查询多个的时候就直接传入new BeanLIstHandler(User.class)
单个值的话就不需要参数,传入new ScalerHandler()
这里虽然只用了一个方法,但是自己真正实现的时候还是要些多个,因为只有多个才能知道现在查的是什么,才知道往里面传ResultHandler的哪个实现类
而这个类实现的时候要知道现在bean类的xx.class,所以方法接收的时候要接收Class c,然后把c传进去。 new BeanHandler©
因为这里要接收一个泛型值,所以返回也是T ,还要在public后标明这是一个泛型方法public T querySingle(){ } 所以可以直接把整个类设置为泛型类,这样就不用标明每个方法了,也就是在类名后面加