首页 > 其他分享 >Apache-DBUtils

Apache-DBUtils

时间:2023-05-28 15:03:34浏览次数:31  
标签:String actor id connection sql Apache DBUtils public

1. Apache—DBUtils  846

1.1 先分析一个问题   846

1.关闭connection后,resultSet结果集无法使用

2.resultSet不利于数据的管理

3.示意图

Apache-DBUtils_System

1.2 用自己的土方法来解决  847

代码在com.stulzl.dbutils_

My_DBUtils

package com.stulzl.dbutils_;

import com.stulzl.jdbcutils_druid.JDBCUtils_Druid;
import org.junit.jupiter.api.Test;

import java.sql.*;
import java.util.ArrayList;

//用自己的土方法来解决将ResultSet封装到 ArrayList    847
public class My_DBUtils {

    //用自己的土方法来解决  847
    @Test
    public void /*ArrayList*/ testSelectToArrayList(){

        System.out.println("使用druid工具类方式完成");

        //1.得到连接
        Connection connection = null;
        //2.组织一个sql语句
        String sql = "select * from actor where id>=?";
        PreparedStatement preparedStatement=null;
        ResultSet set = null;
        //创建一个ArrayList集合,因为我们需要将ResultSet封装到 ArrayList存放actor对象
        ArrayList list = new ArrayList<>();

        try {
            connection = JDBCUtils_Druid.getConnection();
            //3.创建preparedStatement对象
            preparedStatement = connection.prepareStatement(sql);

            //4. 给占位符赋值
            preparedStatement.setInt(1,1);

            //执行,得到结果集
            set = preparedStatement.executeQuery();

            //遍历该结果集
            while(set.next()){
                int id = set.getInt("id");//这里提示("id")可以直接写,也可以写数字(按对应顺序)
                String name = set.getString("name");
                String sex = set.getString("sex");
                Date borndate = set.getDate("borndate");
                String phone = set.getString("phone");
                //把得到的 resultset 的记录,封装到 Actor 对象,放入到 list 集合
                list.add(new Actor(id,name,sex,borndate,phone));
            }
            System.out.println("list集合数据="+list);
            //遍历集合取数据
            for(Actor actor:list){
                System.out.println("id=" + actor.getId() + "\t" + actor.getName());
            }


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            JDBCUtils_Druid.close(set,preparedStatement,connection);
        }

        //因为 ArrayList 和 connection 没有任何关联,所以该集合可以复用.
        //return list;
    }
}

Actor类

package com.stulzl.dbutils_;

import java.util.Date;

//Actor对象和actor表记录对应   847
public class Actor {
    private Integer id;
    private String name;
    private String sex;
    private Date borndate;
    private String phone;

    //无参构造器
    public Actor() {
    }

    //有参构造器
    public Actor(Integer id, String name, String sex, Date borndate, String phone) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.borndate = borndate;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBorndate() {
        return borndate;
    }

    public void setBorndate(Date borndate) {
        this.borndate = borndate;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "\nActor{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", borndate=" + borndate +
                ", phone='" + phone + '\'' +
                '}';
    }
}

1.3 基本介绍  848

1.commons dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的封装,

使用dbutils能极大简化jdbc编码的工作量。

DbUtils类

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

2.使用QueryRunner类实现查询

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

Apache-DBUtils_封装_02

1.4 应用实例   848-851

使用DBUtils +数据连接池(德鲁伊)方式,完成对表actor的crud

Apache-DBUtils_System_03

代码在com.stulzl.dbutils_

DBUtils_USE 

package com.stulzl.dbutils_;


import com.stulzl.jdbcutils_druid.JDBCUtils_Druid;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.jupiter.api.Test;

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

//使用DBUtils +数据连接池(德鲁伊)方式,完成对表actor的crud   848
public class DBUtils_USE {
    @Test
    public void testQueryMany() throws SQLException {//返回结果是多行的情况
        //1. 使用druid得到连接
        Connection connection = JDBCUtils_Druid.getConnection();
        //2. 使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本 Project
        //3. 创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4. 就可以执行相关的方法,返回 ArrayList 结果集
        String sql = "select * from actor where id >= ?";
        // 注意: sql 语句也可以查询部分列
        //String sql = "select id, name from actor where id >= ?";
        // 老韩解读
        //(1) query 方法就是执行 sql 语句,得到 resultset --->封装到 --> ArrayList 集合中
        //(2) 返回集合
        //(3) connection: 连接
        //(4) sql : 执行的 sql 语句
        //(5) new BeanListHandler<>(Actor.class): (多行多列)在将 resultset -> Actor 对象 ->
        //  封装到 ArrayList 底层使用反射机制(Actor.class) 去获取 Actor 类的属性,然后进行封装
        //(6) 1 就是给 sql 语句中的 ? 赋值,可以有多个值,因为是可变参数 Object... params
        //(7) 底层得到的 resultset ,会在 query方法 关闭, 也会关闭 PreparedStatment预处理
        List list =
                queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);

        System.out.println("输出集合的信息");
        for (Actor actor : list) {
            System.out.print(actor);
        }

        //释放资源
        JDBCUtils_Druid.close(null,null,connection);
    }

    //演示 apache-dbutils + druid 完成返回的结果集是单行记录(单个对象)   840
    @Test
    public void testQuerySingle() throws SQLException {
        //1. 使用druid得到连接
        Connection connection = JDBCUtils_Druid.getConnection();
        //2. 使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本 Project
        //3. 创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4. 就可以执行相关的方法
        String sql = "select * from actor where id = ?";
        // 因为我们返回的单行记录<--->单个对象--单行多列即一行数据 , 使用的是 BeanHandler返回 单个对象
        Actor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 3);
        System.out.println(actor);//输出
        //释放资源
        JDBCUtils_Druid.close(null,null,connection);
    }

    //演示 apache-dbutils + druid 完成查询结果是单行单列-返回的就是 object
    @Test
    public void testScalar() throws SQLException {
        //1. 使用druid得到连接
        Connection connection = JDBCUtils_Druid.getConnection();
        //2. 使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本 Project
        //3. 创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4. 就可以执行相关的方法
        String sql = "select name from actor where id = ?";
        //解读: 因为返回的是一个对象--单行单列即一个数据, 使用的 handler 就是 ScalarHandler
        Object obj = queryRunner.query(connection, sql, new ScalarHandler(), 3);
        System.out.println(obj);
        //释放资源
        JDBCUtils_Druid.close(null,null,connection);
    }

    //演示 apache-dbutils + druid 完成 dml (update, insert ,delete)
    @Test
    public void testDML() throws SQLException {
        //1. 使用druid得到连接
        Connection connection = JDBCUtils_Druid.getConnection();
        //2. 使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本 Project
        //3. 创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();

        //组织sql语句
        //String sql = "update actor set name=? where id=?";
        //String sql = "insert into actor values(null, ?, ?, ?, ?)";
        String sql = "delete from actor where id = ?";

        //int affectedRow = queryRunner.update(connection, sql, "张三丰", 3);
        //int affectedRow = queryRunner.update(connection, sql,"林青霞", "女", "1966-10-10", "116");
        int affectedRow = queryRunner.update(connection, sql, 2);

        System.out.println(affectedRow > 0 ? "执行成功" : "执行没有影响到表");
        //释放资源
        JDBCUtils_Druid.close(null,null,connection);
    }
}

1.5 表和 JavaBean 的类型映射关系  851

Apache-DBUtils_sql_04

标签:String,actor,id,connection,sql,Apache,DBUtils,public
From: https://blog.51cto.com/u_15784725/6365075

相关文章

  • apache配置文件之虚拟主机配置
    虚拟主机的配置(1)基于IP地址的虚拟主机配置Listen80<VirtualHost172.20.30.40>DocumentRoot/www/example1ServerNamewww.example1.com</VirtualHost><VirtualHost172.20.30.50>DocumentRoot/www/example2ServerNamewww.example2.......
  • apache几种工作模式对比
    apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm选项来决定apache2的工作模式。如果知道当前的apache2使用什么工作机制,可以通过httpd-l命令列出apache的所有模块,就可以知道其工作方式:prefork:如果httpd-l列出prefork.c,则需要对下面的段进行配置:<IfM......
  • apache2是什么软件
    Apache2是一种开源的、跨平台的Web服务器软件。它是ApacheHTTPServer的第二个主要版本,通常简称为Apache。Apache2是世界上最流行的Web服务器之一,被广泛用于托管网站和提供Web服务。Apache2提供了一个可靠和稳定的基础架构,用于处理HTTP请求和响应。它支持多种操作......
  • org.apache.jasper.JasperException: Unable to compile class for JSP: An error occ
    org.apache.jasper.JasperException:UnabletocompileclassforJSP:Anerroroccurredatline:16inthejspfile:/monday-01.jspSystem.outcannotberesolvedtoatype13:<body>14:<%15:Stringa=request.getParameter("uname");......
  • 超大型纸业品牌“清风”也用上 Apache SeaTunnel 啦!
    我是韩山峰,来自金红叶纸业集团。今天,我将向大家介绍ApacheSeaTunnel在我们金红叶纸业集团中的应用场景,包括我们为何选择ApacheSeaTunnel,以及我们如何基于其提升我们内部的数据开发效率。文|韩山峰编辑整理|曾辉讲师介绍韩山峰金红叶纸业数据分析师01产品选择历程......
  • 一文教会你用Apache SeaTunnel Zeta离线把数据从MySQL同步到StarRocks
    在上一篇文章中,我们介绍了如何下载安装部署SeaTunnelZeta服务(3分钟部署SeaTunnelZeta单节点Standalone模式环境),接下来我们介绍一下SeaTunnel支持的第一个同步场景:离线批量同步。顾名思意,离线批量同步需要用户定义好SeaTunnelJobConfig,选择批处理模式,作业启动后开始同步数据,当......
  • Apache深入优化
    拓扑图:推荐步骤:在centos01安装Apache服务,配置Apache服务设置网站主页在centos02配置DNS服务使用bdqn域名在centos01配置Apache优化prefork和worker工作模式配置压力测试验证实验步骤:在centos01上安装apache服务配置网站配置apache服务启动服务查看运行状态修改apache网站根目录设置......
  • 表达式语言引擎:Apache Commons JEXL 2.1 发布
    CommonsJEXL2.1发布了,该版本和2.0.1是二进制兼容的,但源码不兼容,因为新增了两个接口:org.apache.commons.jexl2.Scriptorg.apache.commons.jexl2.JexlInfoJEXL2.1改进内容:Amorethorougharithmetic(JexlArithmetic)thatallowsfinecontroloverdecimals(scaleand......
  • Apache Hudi 在袋鼠云数据湖平台的设计与实践
    在大数据处理中,实时数据分析是一个重要的需求。随着数据量的不断增长,对于实时分析的挑战也在不断加大,传统的批处理方式已经不能满足实时数据处理的需求,需要一种更加高效的技术来解决这个问题。ApacheHudi(HadoopUpsertsDeletesandIncrementalProcessing)就是这样一种技术,提供......
  • Apache maven 安装与配置 (Mac)
    一、准备文件Maven3.5.4version下载 https://maven.apache.org/download.cgi  二、安装与配置(1)安装将下载好的文件解压到/usr/local目录下,如果找不到/usr/local目录,可以打开苹果访达,按住shift+command+G,则会弹出一个搜索框,在里面输入/usr/local即可出现。也可以使......