DBUtils介绍及使用详解

DBUtils介绍及使用详解

一, DBUtils简介

DBUtils是一个小型的类库, 是一个jdbc的工具,主要是为了简化jdbc的代码使JDBC编程更加方便,简单。
在JDBC编程中,资源的关闭是显式的,极易导致编程出现错误,DBUtils把这些工作抽象出来,使得程序员编程时仅需要关心正真的问题,即对数据库的增删改查。除此之外它还可以做到杜绝资源的泄露,修正JDBC代码并不困难,但是这是耗时而乏味的,这通常导致连接泄露并且难以跟踪到。清洁干净的持久化代码。大段的持久化数据到数据库代码彻底精简,剩下的代码清晰地表达了编码的意图,从ResultSet里自动组装JavaBean。你不再需要手工set每一行每一列的值到bean中,每一行数据都将会以一个Bean实例的形式出现 。也更有利于提高资源的安全性

二,DBUtils详解

1.使用步骤
首先加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接conn。
其次实例化 QueryRunner,得到实例化对象qRunner。
最后再使用 qRunner.update()方法,执行增改删的sql命令,qRunner.query()方法,得到结果集

2,整个dbutils共3个包:org.apache.commons.dbutils
核心类:QueryRunner; ResultSetHandler(是一个接口,主要是完成ORM映射,把结果转化成
我们需要的java对象)
3,核心方法:
*update()用来执行DML(DML:insert update delete;)
*query()用来执行DQL(select)query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):
这一方法执行一个选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。
这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭,ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。
*close():
DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL, 如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
CommitAndCloseQuietly(Connection conn):
这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。LoadDriver(String driveClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。
使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,你也就得到了一个很好的Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。

  • batch(); 用来执行批处理;
    调用本方法之前,需要先创建对象,代码如下:
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    //当使用的是无参的构造器时,可以不提供连接池对象,但是在接下来的调用方法是,必须为方法提供Connection
    对象。

对于结果集的处理有以下几个结果集处理器:
*BenaHandler //把单行结果集的数据封装成javaBean对象,返回值是ResultSetHandler
ResultSetHandler <javaBean类型> rsh = new BeanHandler<javaBean类型>(javaBean.class);
本方法多用于在 处理把单行结果集封装成JavaBean对象。(对象时通过反射完成创建的)

*BeanListHandler
List<javaBean类型> list = <List<javaBean类型>> new BeanListHandler<javaBean类型>(javaBean.class);
本方法多用于把多行结果集封装成对象,并且把对象添加到集合中,新版本中可能不需要进行类型的转换,
的到集合可以通过foreach循环来进行遍历。

*MapHandler
Map <String,Object> map = new MapHandler();
本方法是用来吧单行结果集封装到一个Map中其中map的键是表中的列名称,值对应表的列值。

*MapListHandler
List<Map<String,Object>> listmap = new MapListHandler();
本方法是用来多行结果集的处理,把每行的结果封装成一个map,最后把所有的,安排都装刀片一个集合中
返回值是一个集合,但是集合中存放的是map,

*ColumnHandler
List nameList = new ColumnHandler();
本方法是用来出来单列,单行 或者多行的数据

*ScalarHandler
本方法是用于处理单行单列的数据,多用于聚合函数的查询,但是以一个点需要注意,就是当聚合函数是涉及到
数字类型的时候,一定要注意返回值类型的转换。有的人会选用Integer,long等类型,这些严格来说都是不合法的

三,代码展示

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
public class Demo {

  • 测试增删改
  • @throws SQLException
    */
    public void fun1() throws SQLException {
    student stu = new student();
    stu.setSid(“1006”);
    stu.setSname(“小千”);
    stu.setSage(“30”);
    stu.setSgender(“女”);
    add(stu);
    }

/**

  • 增加方法
  • @throws SQLException
    */
    //创建一个QueryRunner 对象,并且传递一个连接池参数,这样以后调用的本方法时候就不用再提供Connection了,如果没有提供,那么调用本方法时,就必须要提供Connection
    public void add(student stu) throws SQLException {
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
    String sql = “insert into student values(?,?,?,?)”;
    qr.update(sql, stu.getSid(),stu.getSname(),stu.getSage(),stu.getSgender());

}
public void fun2() throws SQLException {
student stu = new student();
stu.setSid(“1006”);
stu.setSname(“小千 不知不觉”);
stu.setSage(“30”);
stu.setSgender(“女”);
update(stu);
}
//修改
public void update(student stu) throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “update set sname=?,sage=?,sgender=? where sid =d?”;
qr.update(sql, stu.getSid(),stu.getSname(),stu.getSage(),stu.getSgender());

}
public void fun3() throws SQLException {
delete(“1006”);
}
//删除方法
public void delete(String id) throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “delete from studnt where id=?”;
qr.update(sql, id);
}

//BeanListHandler用于处理多行结果集,把多个结果分别封装成对象,并且添加到一个集合中,不过得到的结果需要进行强转,可以使用增强for循环集合的遍历。
public void fun4() {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select * from student”;
List rshList = (List) new BeanListHandler(student.class);
for(student L:rshList) {
System.out.println(L);
}
}

//scalarHandler通常用在聚合函数查询的结果集处理,对单列单行进行处理
public void fun5() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select count(1) from student”;
//如果你此时强转用的是Integer 或者long类型的话,都是不行的,因为数据类型的大小可能不够使用发的,比如long类型的可以容纳20的阶乘,但是21的阶乘就超出范围,但是数据类型共同的父类就是Number,用这个是绝对不会出现超出范围的情况处理方法可以是,number.intValue(),或者是number.LongValue();
Number num = (Number)qr.query(sql, new ScalarHandler());
System.out.println(num.intValue());
}
//MapHandler是把得到的单行结果集封装到一个map中
//其中map的键对应的是列名称,值对应的是列的值 。
public void fun6() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select * from student where id=?”;
Map<String,Object> map = qr.query(sql, new MapHandler(),“1006”);
System.out.println(map);
}
}

总结:DBUtils的使用知识还有很多,这里我只是列举了其中一部分,如果看到这篇博客可以帮助你,那它就实现了存在的真正价值啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值