数据库连接池(Druid的简单使用)

Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

使用步骤

一定要导入jar架包。要配置好文件,如果不配置文件,记得在程序中自行添加。

  1. 导入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar

  2. 定义配置文件:可以命名为druid-1.0.9.properties

    复制
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://MySQL地址/数据库名
    username=用户名
    password=密码
    initialSize=初始化连接数
    maxActive=最大连接数
    maxWait=最大等待时间(毫秒为单位)
  3. 加载配置文件druid-1.0.9.properties

  4. 获取连接池对象

  5. 获取数据库连接

举例如下:

复制
package my.view.datasource.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
// 获取加载配置文件的对象
Properties properties = new Properties();
// 获取类的类加载器
ClassLoader classLoader = DruidDemo.class.getClassLoader();
// 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
// 加载配置文件
properties.load(resourceAsStream);
// 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// 获取数据库连接对象
Connection connection = dataSource.getConnection();
// 打印获取到的数据库连接对象地址值
System.out.println(connection);
}
}

定义一个创建数据库连接池对象的类

在使用数据库连接池的时候,我们不可能说每次都如上例中的情况自己写一遍吧。我们可以自定义一个工具类,用来创建数据库连接池对象,这个时候,我们乳沟想要创建数据库连接池对象,直接调用该工具类即可。

创建工具类实例

定义获取数据库连接池对象的方法

复制
/**
* 数据库连接对象
*/
private static DataSource dataSource;
/*
获取数据库连接池对象
*/
static {
try {
// 获取加载配置文件的对象
Properties properties = new Properties();
// 获取类的类加载器
ClassLoader classLoader = JdbcUtils.class.getClassLoader();
// 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
// 加载配置文件
properties.load(resourceAsStream);
// 获取连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource() {
return dataSource;
}

定义获取数据库连接对象的方法

复制
/**
* 获取数据库连接对象
*/
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}

定义释放资源的方法

复制
/**
* 归还连接
* @param t 要被归还到熟即可连接池对象的数据库连接对象
* @param <T> 数据库连接对象的类型
*/
public static <T> void releaseResources (T t){
if(t != null){
try {
// 利用反射,获取class对象
Class<?> aClass = t.getClass();
// 获取class对象中的方法对象
Method close = aClass.getMethod("close");
// 执行方法
close.invoke(t);
} catch (Exception e) {
e.printStackTrace();
}
}
}

该工具类总的代码:

复制
package my.view.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Properties;
public class JdbcUtils {
/**
* 数据库连接对象
*/
private static DataSource dataSource;
/*
获取数据库连接池对象
*/
static {
try {
// 获取加载配置文件的对象
Properties properties = new Properties();
// 获取类的类加载器
ClassLoader classLoader = JdbcUtils.class.getClassLoader();
// 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
// 加载配置文件
properties.load(resourceAsStream);
// 获取连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource() {
return dataSource;
}
/**
* 获取数据库连接对象
*/
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}
/**
* 归还连接
* @param t 要被归还到熟即可连接池对象的数据库连接对象
* @param <T> 数据库连接对象的类型
*/
public static <T> void releaseResources (T t){
if(t != null){
try {
// 利用反射,获取class对象
Class<?> aClass = t.getClass();
// 获取class对象中的方法对象
Method close = aClass.getMethod("close");
// 执行方法
close.invoke(t);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

使用上面创建个工具类实例

有如下一个数据表格

复制
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT, -- id
NAME VARCHAR(10), -- 名字
balance DOUBLE -- 余额
);
INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);

向该表格中插入一条数据,实现如下:

复制
package my.view.datasource.druid;
import my.view.utils.JdbcUtils;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class JdbcUtilsDemo {
public static void main(String[] args) throws Exception{
// 获取数据库连接池对象
DataSource dataSource = JdbcUtils.getDataSource();
// 从数据库连接池对象中获取数据库连接对象
Connection connection = dataSource.getConnection();
// 预定义定义SQL语句
String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);";
// 获取执行预定义SQL语句对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 给?赋值
preparedStatement.setString(1, "WanWu");
preparedStatement.setInt(2, 2000);
// 执行预编译好的SQL语句
preparedStatement.executeUpdate();
// 释放资源:PreparedStatement
JdbcUtils.releaseResources(preparedStatement);
// 归还连接
JdbcUtils.releaseResources(connection);
// 释放资源:数据库连接池
JdbcUtils.releaseResources(dataSource);
}
}

运行程序,然后查询一下表记录:

img

可以看到插入了一条数据,说明测试成功。

posted @   LeeHua  阅读(7500)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航