如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用 数据库连接池 以HikariCP为例
在JDBC中,使用数据库连接池是一个常见的做法,以提高数据库操作的效率和性能。连接池管理着一组数据库连接,这些连接可以被重用而不是每次需要时都创建新的连接。在Java中,你可以使用像HikariCP、Apache DBCP、C3P0等流行的连接池库。
下面是一个使用JDBC和连接池(以HikariCP为例)来封装数据库操作的工具类示例。这个工具类将提供方法来获取连接、执行增删改查操作等。
首先,你需要在你的项目中添加HikariCP的依赖。如果你使用Maven,可以在pom.xml
中添加如下依赖:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>你的HikariCP版本号</version>
</dependency>
<!-- JDBC驱动依赖,以MySQL为例 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>你的MySQL JDBC驱动版本号</version>
</dependency>
然后,你可以创建一个工具类来管理连接池和提供数据库操作方法:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
private static HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
config.setUsername("your_username");
config.setPassword("your_password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
// 其他配置...
dataSource = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
// 示例:插入数据
public static void insertData(String tableName, String column1, String value1, String column2, String value2) {
String sql = "INSERT INTO " + tableName + " (" + column1 + ", " + column2 + ") VALUES (?, ?)";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, value1);
pstmt.setString(2, value2);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 你可以继续添加查询、更新、删除等方法
// 注意:关闭连接池通常在应用关闭时进行,而不是在工具类中
// 可以在你的应用服务器关闭钩子或Spring Boot的@PreDestroy注解的方法中关闭
// public static void closeDataSource() {
// if (dataSource != null) {
// dataSource.close();
// }
// }
}
请注意,在上面的代码中,连接池是在静态初始化块中配置的,并且getConnection()
方法用于从连接池中获取连接。每个数据库操作方法(如insertData
)都使用这个连接来执行其SQL语句,并在方法结束时自动关闭连接(由于使用了try-with-resources语句)。
然而,实际上从连接池中获取的连接在try-with-resources语句中关闭并不会真正关闭底层的数据库连接,而是将连接归还给连接池。这是连接池设计的一个重要特性,可以显著提高性能。
另外,请注意,关闭连接池的操作通常不在工具类中完成,而是在你的应用关闭时(如应用服务器关闭或Spring Boot应用上下文销毁时)进行。在上面的代码中,我注释掉了关闭连接池的方法,因为它不是在这个上下文中调用的。如果你需要在你的应用关闭时关闭连接池,可以取消注释该方法,并在适当的位置调用它。但是,在许多情况下,特别是使用Spring Boot等现代Java框架时,连接池的管理是自动的,你不需要手动关闭它。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2023-08-08 第五节:EF Core中的三类事务(SaveChanges、DbContextTransaction、TransactionScope)
2023-08-08 EF Core事务
2023-08-08 如何改变linux服务器系统时区和时间 修改设置Linux服务器时区
2023-08-08 详解Jvm中时区设置方式,推荐 代码中TimeZone.getTimeZone("Asia/Shanghai") 而不使用TimeZone.getTimeZone("GMT+8")
2023-08-08 @Transactional(rollbackFor = Exception.class) 详解 推荐的事务注解方式 @Transactional(rollbackFor = Exception.class)
2019-08-08 转:异步提交表单插件jquery.form.min.js的使用实例,后台net同样可以接收到Excel文件进行处理
2019-08-08 jquery.form.min.js的ajaxSubmit上传Excel文件,后台返回不是标准json格式回调函数中 textstatus报错parsererror