【JDBC】Apache-DBUtils使用指南

简介: 1.Apache-DBUtils引出为什么要有Apache-DBUtils?返回resultSet的时候:结果集合和connection时关联的,如果关闭连接就不能使用结果集结果集不利于数据管理(只能使用一次)使用放回信息也不方便

1.Apache-DBUtils引出


为什么要有Apache-DBUtils?

返回resultSet的时候:

  • 结果集合和connection时关联的,如果关闭连接就不能使用结果集
  • 结果集不利于数据管理(只能使用一次)
  • 使用放回信息也不方便

Apache-DBUtils图示:



2.Apache-DBUtils查询语句


commons-dbutils是apache组织提供的一个开源JDBC工具类,它是对JDBC的封装


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


示例:使用DBUtils + Druid的方式,完成对于表的CRUD


Apache-Utils下载地址


或者更简单的,使用Maven:


<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>


使用commons-dbutils工具类,需要先创建一个数据库表的映射类,放在domain层

User.java:


/**
 * User数据库表的对应类
 */
public class User {
    private Integer id;
    private String username;
    private String password;
    private String school;
    /**
     * 一定要给一个无参构造器
     */
    public User() {
    }
    public User(Integer id, String username, String password, String school) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.school = school;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", school='" + school + '\'' +
                '}';
    }
}


Apache-DBUtils测试类(查询多条记录的情况):


import jdbc.domain.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
 * Apache - DBUtils演示
 */
public class ApDBUtils {
    public static void main(String[] args) {
        Connection connection = null;
        String sql = "select id,username,password,school from user where id >= ?";
        try {
            connection = DruidJdbcUtils.getConnection();
            // 创建一个QueryRunner
            QueryRunner queryRunner = new QueryRunner();
            // 执行查询语句
            // connection:连接
            // sql:sql语句
            // new BeanHandler<>(User.class):将ResultSet --> User对象 --> 封装到ArrayList中
            // 底层使用反射机制去获取User类的属性,然后封装
            // 100:填充sql的参数,为可变参数
            // 结果集得到的list query函数底层会自动关闭
            List<User> list = queryRunner.query(connection, sql, new BeanListHandler<>(User.class), 100);
            for (User user : list) {
                System.out.println(user);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭连接
            DruidJdbcUtils.close(null, null, connection);
        }
    }
}


Apache-DBUtils测试类(查询单条记录的情况):


/**
 * 查询单条记录
 */
@Test
public void testQuerySingle() {
    Connection connection = null;
    String sql = "select id,username,password,school from user where id = ?";
    try {
        connection = DruidJdbcUtils.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        User user = queryRunner.query(connection, sql, new BeanHandler<>(User.class), 50);
        System.out.println(user);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } finally {
        // 关闭连接
        DruidJdbcUtils.close(null, null, connection);
    }
}


Apache-DBUtils测试类(查询单条单列记录的情况):


/**
 * 查询单行单列
 */
@Test
public void testQueryScalar() {
    Connection connection = null;
    String sql = "select username from user where id = ?";
    try {
        connection = DruidJdbcUtils.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        Object query = queryRunner.query(connection, sql, new ScalarHandler<>(), 100);
        System.out.println(query);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } finally {
        // 关闭连接
        DruidJdbcUtils.close(null, null, connection);
    }
}


3.Apache-DBUtils DML操作


先来我们来演示一下Apache-DBUtils DML操作


/**
 * 演示DML语句
 */
@Test
public void testDML() {
    Connection connection = null;
    String sql = "delete from user where id = ?";
    try {
        connection = DruidJdbcUtils.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        // 返回值为受影响的行数
        int affectedRow = queryRunner.update(connection, sql, 50);
        System.out.println(affectedRow);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } finally {
        // 关闭连接
        DruidJdbcUtils.close(null, null, connection);
    }
}
目录
相关文章
|
30天前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
27 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
5月前
|
监控 Java 数据库连接
Java一分钟之-JDBC连接池:HikariCP, Apache DBCP, C3P0
【6月更文挑战第14天】本文介绍了Java中常用的三种JDBC连接池——HikariCP、Apache DBCP和C3P0。HikariCP以其高性能和低延迟领先,适合高并发环境;Apache DBCP稳定易配置;C3P0则提供高度可定制选项。文章讨论了各连接池的常见问题及避免策略,如配置不当、连接泄露等,并给出示例代码以供参考。选择合适的连接池并正确配置能有效提升应用性能。
102 7
|
6月前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之遇到错误org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc',该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
Java 数据库连接 数据库
Mybatis JDBC No enum constant org.apache.ibatis.type.JdbcType.TEXT异常处理
Mybatis JDBC No enum constant org.apache.ibatis.type.JdbcType.TEXT异常处理
314 0
|
Java 关系型数据库 MySQL
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
170 0
|
SQL 安全 Java
JDBC Apache—DBUtils 详解(通俗易懂)
JDBC 第六节 ApacheDBUtils详解!
370 0
|
SQL Java 数据库连接
Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
199 0
Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
|
SQL Java 数据库连接
Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.securi...
Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
689 0
|
SQL Java 数据库连接
Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root i
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://192.
1444 0

推荐镜像

更多