sqlLite 如何使用数据库连接池

简介: 这篇文章介绍了如何在SQLite数据库操作中使用HikariCP连接池以减少频繁建立和释放数据库连接的资源消耗,包括在Maven项目中添加依赖、配置HikariDataSource对象以及实现数据库连接池的具体代码示例。

前言

编写的一个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包没有打入到项目中。

相关文章
|
10月前
|
存储 设计模式 Cloud Native
C++QT SqlLite数据库简单使用
C++QT SqlLite数据库简单使用
|
22天前
|
测试技术 数据库 数据库管理
SqlLite数据库连接池
这篇文章介绍了如何使用HikariCP作为SQLite数据库的连接池,包括配置依赖、创建连接池、获取连接、关闭连接以及进行数据库操作的示例代码和性能测试对比。
|
2月前
|
SQL 关系型数据库 MySQL
|
SQL Dart 算法
Flutter SqlLite数据库快速入门
Flutter SqlLite数据库快速入门
Flutter SqlLite数据库快速入门
|
数据库 Python
Python操作sqllite数据库
Python操作sqllite数据库
146 0
|
存储 数据库 Python
使用python获取历史天气,存储到sqllite数据库
使用python获取历史天气,存储到sqllite数据库
179 0
|
数据库 Android开发
Android中SQLlite数据库的增删改查
Android中SQLlite数据库的增删改查
200 0
|
SQL 缓存 测试技术
07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例
 1 目标从sqllite中读取数据并显示如下: MainActivity对应的界面 MainActivity2对应的界面           2  配置Android的清单文件 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;manifest xm
1230 0
|
SQL 数据库 数据安全/隐私保护
初识SqlLite ---.net连接数据库
  Sqlite 是一款轻量级的关系型数据库,以小巧和嵌入式闻名。以前只是听说,现在终于忍不住要尝试下.本文的初衷是为.net平台的使用者提供帮助。 Sqlite有专门为VS2010开发的程序包,大家可以到System.
1506 0
|
21天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
91 2