第9章 Apache-Dbutils实现CRUD操作

1. Apache-DBUtils简介

*commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

*API介绍:

org.apache.commons.dbutils.QueryRunner

org.apache.commons.dbutils.ResultSetHandler

工具类:org.apache.commons.dbutils.DbUtils

*jar包

2.使用QueryRunner添加数据

 public void testInsert(){
        Connection conn = null;
        try {
            QueryRunner runner = new QueryRunner();
            conn = JDBCUtiles3.getConnection();
            String sql="insert into customers(name,email,birth)values(?,?,?)";
            int insertcount = runner.update(conn, sql, "翟天临", "zhaitianlin@163.com", "1995-01-23");
            System.out.println("添加了"+insertcount+"条记录");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtiles.closeResource(conn,null);
        }
    }

 3.使用QueryRunner查询操作

@Test
    public void testQuery1(){
        Connection conn = null;
        try {
            QueryRunner runner = new QueryRunner();
            conn = JDBCUtiles3.getConnection();
            String sql="select * from customers where id=?";
            //BeanHandler:是ResultSetHandler接口的实现类,用于封装表中的一条记录
            BeanHandler<Customer> handler = new BeanHandler<Customer>(Customer.class);
            Customer customer = runner.query(conn, sql, handler, 25);
            System.out.println(customer);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtiles.closeResource(conn,null);
        }
    }
    @Test
    public void testQuery2(){
        Connection conn = null;
        try {
            QueryRunner runner = new QueryRunner();
            conn = JDBCUtiles3.getConnection();
            String sql="select * from customers where id<?";
            //BeanListHandler:是ResultSetHandler接口的实现类,用于封装表中的多条记录
            BeanListHandler<Customer> listHandler = new BeanListHandler<>(Customer.class);
            List<Customer> customerList = runner.query(conn, sql, listHandler, 25);
            System.out.println(customerList);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtiles.closeResource(conn,null);
        }
    }

4.使用QueryRunner查询特殊值

public void testQuery3(){
        Connection conn = null;
        try {
            QueryRunner runner = new QueryRunner();
            conn = JDBCUtiles3.getConnection();
            String sql="select count(1) from customers";
            ScalarHandler handler = new ScalarHandler();
            Object query = runner.query(conn, sql, handler);
            System.out.println(query);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtiles.closeResource(conn,null);
        }
    }

4.自定义ResultSetHandler

*使用ResultSetHandler的匿名实现类实现

public void testQuery4(){
        Connection conn = null;
        try {
            QueryRunner runner = new QueryRunner();
            conn = JDBCUtiles3.getConnection();
            String sql="select * from customers where id<?";
            //自定义ResultSetHandler
            ResultSetHandler<Customer> handler = new ResultSetHandler<Customer>(){
                //方法重写
                @Override
                public Customer handle(ResultSet resultSet) throws SQLException {
                    //resultSet就是结果集
                    //在重写方法中写入对结果集的操作
                    System.out.println("handler");
                    return null;
                }
            };
            Customer query = runner.query(conn, sql, handler, 25);
            System.out.println(query);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtiles.closeResource(conn,null);
        }
    }

5. 使用DbUtils工具类实现资源的关闭

package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtiles3 {
    private static DataSource source;
    static {
        try {
            Properties pros=new Properties();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
            pros.load(is);
            source= DruidDataSourceFactory.createDataSource(pros);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        return source.getConnection();
    }

    //使用DbUtils工具类实现资源的关闭
    public static void closeResource(Connection conn, Statement ps, ResultSet rs){
        DbUtils.closeQuietly(conn);
        DbUtils.closeQuietly(ps);
        DbUtils.closeQuietly(rs);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

桃桃tao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值