文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。
一、前言
编写的一个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包没有打入到项目中。