dbutils和连接池还有优化错误错误捕捉

dbutils和连接池还有优化错误错误捕捉

dbutils 在中文中通常指数据库工具,它是用于与数据库进行交互和管理的工具集。这些工具可以包括连接数据库、执行 SQL 查询、获取数据以及执行各种数据库相关操作的功能。在数据分析、数据科学和数据库管理等领域,dbutils 非常常见,并且在不同的编程语言和环境中都可能有对应的实现。

如何调用dbutils

第一步肯定添加依赖,依赖就直接在pom.xml中就行了《 刷新pml文件!》

<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.8.1</version>
</dependency>

创建并且使用QueryRunner

这里我们创建 QueryRunner 的对象,我们在项目的整体结构中已经写了 ConnectionUtlil 的文件,这里我为什么要调用 ConnectionUtlil.ds 的方法呢,这里我还用了一个连接池

连接池(druid) 是一种用于管理数据库连接的技术。顾名思义,它就像是一个池子,里面存放着预先建立好的数据库连接。当应用程序需要与数据库进行通信时,它可以从连接池中获取一个可用的连接,而不是每次都重新建立连接。

连接池的作用包括:

  1. 提高性能:连接池可以减少因为频繁建立和关闭连接而产生的开销,从而提高数据库访问的效率。
  2. 降低资源消耗:通过复用已建立的连接,连接池可以减少系统资源的占用,特别是在高并发情况下。
  3. 控制连接数量:连接池可以设置最大连接数和最小连接数,以防止过多的连接导致数据库负载过高。
  4. 提高可靠性:连接池可以对连接进行有效的管理和监控,确保连接的可用性和稳定性。
// 创建一个QueryRunner对象,并使用ConnectionUtlil类中的数据源作为参数
QueryRunner runner = new QueryRunner(ConnectionUtlil.ds);

创建连接池(druid)《添加依赖》

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>

依赖添加完后记得刷新pml文件,这才能让文件从网上下载下来

修改ConnectionUtlil文件

在整体结构项目中已经写完了,有不知道的同学们可以回去看一下

// 公共静态数据源对象,用于存储数据库连接池
public static DataSource ds;
static {
// 创建一个Properties对象
Properties props = new Properties();
// 获取资源文件的输入流
InputStream is =ConnectionUtlil.class
.getClassLoader()
.getResourceAsStream("/db.properties");
try {
// 加载属性文件到Properties对象中
props.load(is);
// 使用DruidDataSourceFactory根据Properties对象创建数据源
ds= DruidDataSourceFactory.createDataSource(props);
} catch (Exception e) {
// 捕获异常并抛出运行时异常
throw new RuntimeException(e);
}
}

上面的获取资源文件输入流(db.properties)

在?为什么要写资源文件输入流

资源文件输入流通常指的是在Java等编程语言中用于读取项目中的资源文件的输入流

  1. 跨平台性:通过使用资源文件输入流,可以确保代码在不同的操作系统上都能正确地读取资源文件。资源文件可以位于项目的 classpath 中,而不需要硬编码文件路径,因此可以在不同的操作系统上运行而无需修改路径。
  2. 可打包性:资源文件通常被打包在项目的 JAR 文件中,使用资源文件输入流可以方便地从 JAR 文件中读取资源,而不需要外部文件系统的支持。
  3. 灵活性:资源文件输入流提供了一种灵活的方式来读取资源文件,可以从文件系统、网络或其他源读取资源,而不限于特定的文件路径或协议。
  4. 异常处理:资源文件输入流会抛出 IOException 等异常,因此可以通过异常处理机制来处理读取资源文件时可能出现的错误情况,如文件不存在、文件格式错误等。

注意!在resources中创建配置文件(db.properties)

# 数据库连接URL
url=jdbc:mysql://127.0.0.1/java196

# 数据库用户名
username=root

# 数据库密码
password=123456

# 数据库驱动类名
driverClassName=com.mysql.cj.jdbc.Driver

# 连接池中允许的最大活动连接数
maxActive=10

# 初始化连接池时创建的初始连接数
initialSize=5

# 当连接池中的连接耗尽时,等待获取连接的最大等待时间(毫秒)
maxWait=60000

# 连接池中保持的最小空闲连接数
minIdle=10

在(ConnectionUtlil)中写个getConnection的返回

public static Connection getConnection() throws SQLException {
return ds.getConnection();
}

关于连接池已经写完我们继续dbutils对整个项目的改写

我们开始改Dao包(T1Daolmpl)

查询方法(getall())《BeanListHandler》

BeanListHandler对象的解释用于将查询结果转换为 Java Bean 的列表。在数据库查询操作中,通常会返回一系列的记录,每条记录都可以映射到一个 Java Bean 对象中。BeanListHandler 就是将这些记录转换成 Java Bean 对象的列表。

//定义SQL语句
String sql="select id,f1 from test1";
//创建BeanListHandler对象
BeanListHandler<T1entity> beanListHandler = new BeanListHandler<>(T1entity.class);
// 执行查询操作,将结果存储在rs中
List<T1entity> rs=runner.query(sql,beanListHandler);
return rs;

删除方法( deleteById)

// 创建 SQL 语句,用于删除 test1 表中 id 为指定值的记录
String sql ="delete from test1 where id=?";
// 执行 SQL 语句并传入 idVal 的值作为参数
runner.update(sql,idVal);

添加方法(getAdd)

//定义一个SQL语句,向test1表中插入数据
String sql="Insert into test1(f1) values(?)";
// 执行 SQL 语句并传入 t1 的值作为参数
runner.update(sql,t1);

根据ID查询方法(getById)《BeanHandler》

BeanHandler用于将查询结果转换为单个 Java Bean 对象。在数据库查询操作中,通常会返回一条记录,该记录可以映射到一个 Java Bean 对象中。BeanHandler 就是将这条记录转换成一个 Java Bean 对象

//定义查询语句,从test1表中按id查询id和f1两个字段
String sql="select id,f1 from test1 where id=?";
//创建一个BeanHandler对象,用于将查询结果转换为T1entity对象
BeanHandler<T1entity> handler = new BeanHandler<>(T1entity.class);
//执行查询操作,将查询结果转换为T1entity对象
T1entity query = runner.query(sql, handler,id);
//返回查询结果
return query;

修改方法(update)

//构建更新数据的SQL语句,更新test1表中的f1字段,根据id进行定位
String sql="update test1 set f1=? where id=?";
// 使用SqlRunner中的update方法执行SQL语句,将t1entity中的f1字段值和id字段值作为参数传入
runner.update(sql,t1entity.getF1(),t1entity.getId());

关于ResultSetHandler

字段 描写 补充
ArrayHandler 把数据库中的一条记录添加到Array数组中[1,2,3] ArrayHandler ah = new ArrayHandler();
MapHandler 把数据库中的一条记录添加到Map<String,Object>中,字段名为key,属性值为value , id=1,f1=”张三” MapHandler mh = new MapHandler();
BeanHandler 把数据库中的一条记录添加到Bean(实体类)中。 BeanHandler<实体类名> bh = new BeanHandler()<实体类.class>;
ScalarHandler 把数据库中的一个记录的某一列的某一个数据添加到Scalar。 ScalarHandler sh = new ScalarHandler<>(1);
ArrayListHandler 把数据库的一条记录添加到数组中,再把一个个数组添加到List集合中。
MapListHandler 把数据库的一条记录添加到Map中,再把Map添加到List中。
ColumnListHandler 把数据库中的一列数据拿出。 ColumnListHandler创建时,最好用它的父类AbstractListHandler创建,不然获取到的数据不会按照你传入的类型转换,而是获取的数据在数据库中是什么数据类型它返回的数据类型就是什么。父类创建可以避免这一点。
KeyedHandler 把数据库中数据添加在一个Map中,你传入的参数便是它的键,Value也是一个Map。
BeanMapHandler 把数据库中的数据添加到Bean(实体类)再把Bean添加Map中。

错误捕捉优化