)1、使用数据库连接池过程
1.1 引入pom
<!--HikariCP数据库连接池-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
1.2 创建数据库连接池
public final static String DB_TRANSPATH ="D:\\GrgBanking\\iTerminal\\" + "Data" + File.separator + "trans.db";
private static String Drivde = "org.sqlite.JDBC";
private static Statement statement;
private static Connection connection;
private static ResultSet resultSet;
/**
* 4.提升作用域
*/
private static HikariDataSource dataSource;
private static HikariConfig config;
//创建日志对象 Logger
static final Logger log = Logger.getLogger(JdbcUtils_HKCP.class);
/**
* 1.获取数据源 dataSource
*/
static {
try {
log.info("开始创建数据库连接池");
config = new HikariConfig();
String dbFilePath = "jdbc:sqlite:" + DB_TRANSPATH;
config.setJdbcUrl(dbFilePath);
config.setDriverClassName(Drivde);
dataSource = new HikariDataSource(config);
} catch (Exception e) {
log.error("创建数据库连接池失败:", e);
}
log.info("创建数据库连接池结束");
}
1.3 获取连接 (数据源dataSource自带连接)
/**
* 2.获取连接 (数据源dataSource自带连接)
*
* @return
* @throws SQLException
* @throws SQLException
*/
public void connect() {
log.info("SqlLite connection start");
try {
if (null == connection) {
connection = dataSource.getConnection();
statement = connection.createStatement();
}
} catch (SQLException e) {
log.error("SqlLite connection error:", e);
}
log.info("SqlLite connection end");
}
1.4 关闭连接
/**
* @param
* @return
* @author ZYZ
* @description 3.释放数据库资源
*/
public static void release() {
log.info("SqlLite close start");
try {
if (null != resultSet) {
resultSet.close();
resultSet = null;
}
if (null != statement) {
statement.close();
statement = null;
}
if (null != connection) {
connection.close();
connection = null;
}
} catch (SQLException e) {
log.error("SqlLite close error", e);
}
log.info("SqlLite close end");
}
1.5 增加案例
/**
* @param sql sql语句
* @return int
* @author ZYZ
* @description 插入数据库操作并返回数据ID
*/
public int insertGoBackIDHKCP(String sql) throws SQLException {
try {
connect();
log.info("insertGoBackID SQL:" + sql);
statement.executeUpdate(sql);
resultSet = statement.getGeneratedKeys();
int iresult = resultSet.getInt(1);
return iresult;
} finally {
release();
}
}
1.6 测试
ElectronicFlowUtils.insert(seriaNumber, "测试数据库连接池");
2023-11-28 19:20:48 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:42) - 开始创建数据库连接池
2023-11-28 19:20:48 DEBUG (com.zaxxer.hikari.HikariConfig:946) - Driver class org.sqlite.JDBC found in Thread context class loader sun.misc.Launcher$AppClassLoader@58644d46
2023-11-28 19:20:48 DEBUG (com.zaxxer.hikari.HikariConfig:1066) - HikariPool-1 - configuration:
2023-11-28 19:20:48 DEBUG (com.zaxxer.hikari.HikariConfig:1098) - allowPoolSuspension.............false
2023-11-28 19:20:48 DEBUG (com.zaxxer.hikari.HikariConfig:1098) - autoCommit......................true
2023-11-28 19:20:48 DEBUG (com.zaxxer.hikari.HikariConfig:1098) - catalog.........................none
### 中间省略了大部分数据库连接池的日志打印
2023-11-28 19:20:49 INFO (com.zaxxer.hikari.HikariDataSource:80) - HikariPool-1 - Starting...
2023-11-28 19:20:49 DEBUG (com.zaxxer.hikari.pool.HikariPool:564) - HikariPool-1 - Added connection org.sqlite.jdbc4.JDBC4Connection@6325a3ee
2023-11-28 19:20:49 INFO (com.zaxxer.hikari.HikariDataSource:82) - HikariPool-1 - Start completed.
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:51) - 创建数据库连接池结束
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:62) - SqlLite connection start
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:71) - SqlLite connection end
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:85) - insertGoBackID SQL:insert into electronic_flow(serial_number,content,create_time,update_time,upload_flag,description,res_code) values('602120','测试数据库连接池','2023-11-28 19:20:49','',0,'','');
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:140) - SqlLite close start
2023-11-28 19:20:49 INFO (com.zyz.yu.SRCSqLite.helper.JdbcUtils_HKCP:157) - SqlLite close end
简单测试 对比了一下 使用数据库连接池 和 不适用情况下的时间效率。
```
/**
* 测试插入数据库,采用数据池的方式
* //插入 50次 执行时长 957毫秒
* //插入100次 执行时长:1077 毫秒.
* // 插入 1000 次 执行时长:3309 毫秒.
* // 执行1000次 查询 和 添加 执行时长:3916 毫秒.
* 插入 1000次 查询 1000 次 修改 1000次 执行时长:4924 毫秒. 执行时长:5180 毫秒.
*
*/
/**
* 测试插入数据库,不使用数据池技术
* //插入 50次 执行时长 执行时长:1011 毫秒.
* //插入100次 执行时长:1167 毫秒.
* //插入1000次 执行时长:3931 毫秒.
* 插入 1000次 查询 1000 次 执行时长:5199 毫秒.
* 插入 1000次 查询 1000 次 修改 1000次 执行时长:6508 毫秒.
*
*/