DBUtils的使用

DbUtils的介绍:

DbUtils 是一个jdbc的工具,使用的范围内非常广,主要是为了简化jdbc的代码。
核心类:QueryRunner; ResultSetHandler(是一个接口,主要是完成ORM映射,把结果街转化成 我们需要的java对象)

核心方法:

  • 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());
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值