DbUtils的使用

    科技2026-03-28  10

    DbUtils 是一个jdbc的工具,使用的范围内非常广,主要是为了简化jdbc的代码。

    核心类:QueryRunner;

    核心方法:

    update();用来执行DDL(DDL:create alert,drop;);

    query();用来执行DML(DML:insert update delete;);

    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等类型,这些严格来说都是不合法

    的,例如,long类型最大只能容纳20的阶乘,21的阶乘就会包异常,所以我们要选用Number(这个是所有数据类型)

    的父类,并且对外提供的有Number.intValue(),和Number.LongValue(),等方法。

    具体的代码如下:

    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 Demo1 {

    //总结:使用DBUtils工具的步骤就是,

    /**

    首先要创建一个QueryRunner对象 然后给出sql语句 通过QueryRunner对象来执行SQL语句,并且针对不用的SQL语句使用不同的结果集处理器。 并且本对象会自动关闭连接。

    */

    /**

    测试增删改(她们的模板差不多)

    @throws SQLException

    */

    public void fun1() throws SQLException {

    student stu = new student();

    stu.setSid(“1007”);

    stu.setSname(“蒋干”);

    stu.setSage(“35”);

    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(“1007”);

    stu.setSname(“蒋干 不知不觉”);

    stu.setSage(“35”);

    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(“1007”);

    }

    //删除方法

    public void delete(String id) throws SQLException {

    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());

    String sql = “delete from studnt where id=?”;

    qr.update(sql, id);

    }

    /**

    查询语句

    @throws SQLException

    */

    //BeanHandler结果集处理器用来处理,把单行查询得到的结果集抓换成对象

    public void fun4() throws SQLException {

    //创建对象

    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());

    ResultSetHandler rsh = new BeanHandler(student.class);

    String sql = “select * from student where sid=?”;

    student stu = qr.query(sql, rsh, “1007”);

    }

    //BeanListHandler用于处理多行结果集,把多个结果分别封装成对象,并且添加到一个集合中

    //不过得到的结果需要进行强转,可以使用增强for循环集合的遍历。

    public void fun5() {

    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);

    }

    }

    //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(),“1003”);

    System.out.println(map);

    }

    //MapListHandler用来处理多行结果集,是把多行结果集中的每行数据封装成一个对象在map中,然后把多个Map

    //封装到一个集合中,写成了List<Map<String,Object>>

    public void fun7() throws SQLException {

    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());

    String sql = “select * from student”;

    List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler());

    for(Map<String,Object> map:mapList) {

    System.out.println(map);

    }

    }

    //用来处理单列多(单)行的数据,封装到集合中

    public void fun8() throws SQLException {

    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());

    String sql = “select sname from student”;

    List nameList = qr.query(sql, new ColumnListHandler());

    System.out.println(nameList);

    }

    //scalarHandler通常用在聚合函数查询的结果集处理,对单列单行进行处理

    public void fun9() 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());

    }

    }

    Processed: 0.020, SQL: 9