JDBC的ApDBUtils查询和DML

一、Apache—DBUtils

1.commons-dbutils是Apache组织提供的一个开源JDBC工具类库,对JDBC封装使用dbutlis可以很大简化jdbc编码工作量。DbUtils类

2.QueryRunner类:封装了SQL的执行,线程安全,可以实现增,删,改,查,批处理。

3.使用QueryRunner类实现查询。

4.ResultSetHandler接口:接口用于处理java.sql.ResultSet,将数据按要求转换成另一种形式。


ArrayHandler:把结果集中的第一行数据转成对象数组
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到list中
BeanHandler:将结果集中的每一行数据封装到一个对应的JavaBean实例中,存放到List里
ColumnListHandler:将结果集中某一列的数据存放到List中
KeyedHandler(name):将结果集中的每行数据都封装到Map里,再把这些map再存放到一个map里,其key为指定key
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。


二、ApDBUtils源码分析

ApDBUtils 的jar包:https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils/1.3

package com.jun.jdbc.datasource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


public class DBUtilsTest {
   //使用apache-DBUtils工具类+druid完成对表crud操作
    @Test
    public void queryMany() throws SQLException {//返回结果是多行的情况
        //得到连接
        Connection connection = JDBCUtilsDruid.getConnection();
        //导入DBUtils的jar包,使用DBUtils类和接口
        //创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //执行相关的方法,返回ArrayList结果集
        //String sql ="select * from actor where id>=?";
        String sql ="select name from actor where id>=?";
        //1.query方法就是执行sql语句,得到resultest --封装到 -->ArrayList集合中
        //2.返回集合
        //3.connection:连接
        //4.sql:执行的sql语句
        //5.new BeanListHandler<>(Actor.class):将resultset ->Actor 对象 ->封装到ArrayList
        //底层使用反射机制获取Actor类的属性,然后进行封装
        //6.1是给?赋值,可以有多个值,因为可变参数Object...params
        //7.底层得到将resultset,在query关闭,关闭preparedStatement
        /*源码分析:
        public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
                PreparedStatement stmt = null;//定义PreparedStatement
                ResultSet rs = null;//接收返回的ResultSet
               Object result = null;//返回ArrayList

              try {
                  stmt = this.prepareStatement(conn, sql);//创建PreparedStatement
                  this.fillStatement(stmt, params);//对sql进行?赋值
                  rs = this.wrap(stmt.executeQuery());//执行sql,返回resultset
                  result = rsh.handle(rs);//返回resultset -->ArrayList(result)(使用反射)
             } catch (SQLException var33) {
                  this.rethrow(var33, sql, params);
        } finally {
            try {
                this.close(rs);//关闭resultset
            } finally {
                this.close((Statement)stmt);//关闭preparedStatement
            }
        }

        return result;
    }
         */
        List<Actor> list = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
        for (Actor actor:list) {
            System.out.println(actor);
        }
         //关闭连接
        JDBCUtilsDruid.close(null,null,connection);
    }
}

三、ApDBUtils查询2

   //使用apache-DBUtils工具类+druid完成 返回的结果是单行记录
    @Test
    public void QuerySingle() throws SQLException {
        //得到连接
        Connection connection = JDBCUtilsDruid.getConnection();
        //导入DBUtils的jar包,使用DBUtils类和接口
        //创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //执行相关的方法,返回单个对象
        String sql ="select * from actor where id>=?";
        //返回单个记录<-->单个对象,使用的 Hander 是BeanHandler
        Actor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 2);
        System.out.println(actor);
        //关闭连接
        JDBCUtilsDruid.close(null,null,connection);
    }

    //使用apache-DBUtils工具类+druid完成 返回的结果是单行单列 -返回就是object
    @Test
    public void Scalar() throws SQLException {
        //得到连接
        Connection connection = JDBCUtilsDruid.getConnection();
        //导入DBUtils的jar包,使用DBUtils类和接口
        //创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //执行相关的方法,返回单行单列 ,就是Object
        String sql ="select name from actor where id>=?";
        //因为返回的是一个对像,使用的handler 就是ScalarHandler
        Object o = queryRunner.query(connection, sql, new ScalarHandler(), 2);
        System.out.println(o);
        //关闭连接
        JDBCUtilsDruid.close(null,null,connection);
    }
}

四、ApDBUtils DML

//使用apache-DBUtils工具类+druid完成 DML(update,insert,delete)
    @Test
    public void DML() throws SQLException {
        //得到连接
        Connection connection = JDBCUtilsDruid.getConnection();
        //导入DBUtils的jar包,使用DBUtils类和接口
        //创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //sql语句完成update,insert,delete
        //String sql="update actor set name = ? where id =?";
        //String sql = "insert into actor values(null,?,?,?,?)";
        String sql = "delete from actor where id=?";
        //执行dml 操作 queryRunner.update()
        //返回的值是受影响的行数(affected:受影响)
        //int affectedRow = queryRunner.update(connection, sql, "小鱼儿", 2);
        //int affectedRow = queryRunner.update(connection, sql, "花无缺","男","1744-5-6","123");
        int affectedRow = queryRunner.update(connection, sql,  2);
        System.out.println(affectedRow>0?"执行成功":"执行没有影响到表");
        //关闭连接
        JDBCUtilsDruid.close(null,null,connection);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值