sqlLite 如何使用数据库连接池

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

一、前言

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

你可能感兴趣的:(项目开发实战案例,数据库,jvm,sqlite)