前言
编写的一个jar包工具中,要使用到sqlLite数据库,由于要频繁的操作数据库、在建立连接和释放资源的时候 会很耗资源。想到用数据池可以解决这个问题,由于编写的工具,没有用到后端框架、只是一个简单的maven工程。所以在集成sqlLite数据池的时候会有所差别、这里进行简单记录
二、方法
1.1 加入pom依赖
我这里使用的是Maven工程,首先添加pom包依赖 【如果不是maven工程,需自行下载这个jar包,丢入到项目的lib目录下】 、这里使用HikariCP 数据池,有关该数据池的使用,请自行查阅资源
<!-- sqlite的连接驱动 -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.25.2</version>
</dependency>
<!-- HikariCP数据库连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
1.2 编写方法
然后可以创建HikariDataSource对象,并将它作为数据源:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sqlite:/path/to/database.db");
config.setDriverClassName("org.sqlite.JDBC");
HikariDataSource ds = new HikariDataSource(config);
1.3 实际使用案例
/**
* @author zyz
* @version 1.0
* @data 2023/10/30 16:29
* @Description: 采用数据库连接池
*/
public class JdbcUtils_DBCP {
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;
private static String dbFilePath = "jdbc:sqlite:D:\\GrgBanking\\iTerminal\\" + "Data" + File.separator + "trans.db";
public JdbcUtils_DBCP(String dbFilePath) {
this.dbFilePath = "jdbc:sqlite:" + dbFilePath;
}
/**
* 1.获取数据源 dataSource
*/
static {
try {
config = new HikariConfig();
config.setJdbcUrl(dbFilePath);
config.setDriverClassName(Drivde);
dataSource = new HikariDataSource(config);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("创建连接池失败:" + e.getMessage());
}
}
/**
* 2.获取连接 (数据源dataSource自带连接)
*
* @return
* @throws SQLException
* @throws SQLException
*/
public void connect() {
GrgLoggerRepository.getMonitorCOMM().LogInfo("SqlLite connection start");
try {
if (null == connection) {
connection = dataSource.getConnection();
statement = connection.createStatement();
}
} catch (SQLException e) {
GrgLoggerRepository.getMonitorCOMM().LogError("SqlLite connection error:", e);
}
GrgLoggerRepository.getMonitorCOMM().LogInfo("SqlLite connection end");
}
/**
* @param sql sql语句
* @return int
* @author ZYZ
* @description 插入数据库操作并返回数据ID
*/
public int insertGoBackIDHKCP(String sql) throws SQLException {
try {
connect();
GrgLoggerRepository.getMonitorCOMM().LogInfo("insertGoBackID SQL:" + sql);
statement.executeUpdate(sql);
resultSet = statement.getGeneratedKeys();
int iresult = resultSet.getInt(1);
return iresult;
} finally {
release();
}
}
/**
* @param
* @return
* @author ZYZ
* @description 3.释放数据库资源
*/
public static void release() {
GrgLoggerRepository.getMonitorCOMM().LogInfo("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) {
GrgLoggerRepository.getMonitorCOMM().LogError("SqlLite close error", e);
}
GrgLoggerRepository.getMonitorCOMM().LogInfo("SqlLite close end");
}
}
三、后语
遇到的问题
本地测试数据池可以正常创建,正常连接操作等。但是打包后,数据池创建失败。失败原因是:数据池相关jar包没有打入到项目中。