首页 > 数据库 >如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用 数据库连接池 以HikariCP为例

如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用 数据库连接池 以HikariCP为例

时间:2024-08-08 10:55:58浏览次数:13  
标签:java HikariCP 数据库 为例 关闭 工具 config 连接池

如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用 数据库连接池 以HikariCP为例
在JDBC中,使用数据库连接池是一个常见的做法,以提高数据库操作的效率和性能。连接池管理着一组数据库连接,这些连接可以被重用而不是每次需要时都创建新的连接。在Java中,你可以使用像HikariCP、Apache DBCP、C3P0等流行的连接池库。

下面是一个使用JDBC和连接池(以HikariCP为例)来封装数据库操作的工具类示例。这个工具类将提供方法来获取连接、执行增删改查操作等。

首先,你需要在你的项目中添加HikariCP的依赖。如果你使用Maven,可以在pom.xml中添加如下依赖:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>你的HikariCP版本号</version>
</dependency>

<!-- JDBC驱动依赖,以MySQL为例 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>你的MySQL JDBC驱动版本号</version>
</dependency>

然后,你可以创建一个工具类来管理连接池和提供数据库操作方法:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {

    private static HikariDataSource dataSource;

    static {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
        config.setUsername("your_username");
        config.setPassword("your_password");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        // 其他配置...

        dataSource = new HikariDataSource(config);
    }

    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 示例:插入数据
    public static void insertData(String tableName, String column1, String value1, String column2, String value2) {
        String sql = "INSERT INTO " + tableName + " (" + column1 + ", " + column2 + ") VALUES (?, ?)";
        try (Connection conn = getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, value1);
            pstmt.setString(2, value2);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 你可以继续添加查询、更新、删除等方法

    // 注意:关闭连接池通常在应用关闭时进行,而不是在工具类中
    // 可以在你的应用服务器关闭钩子或Spring Boot的@PreDestroy注解的方法中关闭
    // public static void closeDataSource() {
    //     if (dataSource != null) {
    //         dataSource.close();
    //     }
    // }
}

请注意,在上面的代码中,连接池是在静态初始化块中配置的,并且getConnection()方法用于从连接池中获取连接。每个数据库操作方法(如insertData)都使用这个连接来执行其SQL语句,并在方法结束时自动关闭连接(由于使用了try-with-resources语句)。

然而,实际上从连接池中获取的连接在try-with-resources语句中关闭并不会真正关闭底层的数据库连接,而是将连接归还给连接池。这是连接池设计的一个重要特性,可以显著提高性能。

另外,请注意,关闭连接池的操作通常不在工具类中完成,而是在你的应用关闭时(如应用服务器关闭或Spring Boot应用上下文销毁时)进行。在上面的代码中,我注释掉了关闭连接池的方法,因为它不是在这个上下文中调用的。如果你需要在你的应用关闭时关闭连接池,可以取消注释该方法,并在适当的位置调用它。但是,在许多情况下,特别是使用Spring Boot等现代Java框架时,连接池的管理是自动的,你不需要手动关闭它。

标签:java,HikariCP,数据库,为例,关闭,工具,config,连接池
From: https://www.cnblogs.com/sunny3158/p/18348509

相关文章

  • 超全能,MobaXterm远程工具,网工、运维这样用就对了
    号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部上午好,我的网工朋友。远程访问和管理服务器的能力对于开发人员、系统管理员乃至普通用户来说都变得越来越重要。随着云计算和分布式系统的普及,能够高效、安全地进行远程操作已经成为一项必备技能......
  • 如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用
    如何把Connection封装到工具类里面调用工具类方法实现增删改查操作javaJDBC使用C3P0数据库连接池答:当使用C3P0作为数据库连接池时,你可以按照类似的模式来配置和使用它。以下是一个示例,展示了如何在Java项目中配置C3P0连接池,并创建一个工具类来管理数据库连接和执行基本的......
  • 大树采集工具箱:淘宝爆款采集实时数据.同标题洗链接找加价的同行.同标题反洗找同款
    在激烈竞争的电商环境中,掌握市场动态和优化运营策略是每个卖家成功的关键。尤其是在淘宝这个庞大的平台上,每天都有无数的新商品上线,如何快速、准确地获取有价值的信息,成为了卖家的制胜法宝。大树采集工具箱应运而生,它不仅可以帮助用户模拟爆款采集实时数据,还提供了一系列强大功......
  • Java基础(十):静态变量、静态方法、代码块、main方法
    Java基础(十):静态变量、静态方法、代码块、main方法文章目录一、类变量/静态变量(static)二、类方法/静态方法(static)三、main方法四、代码块(一)static代码块(二)普通代码块五、属性初始化、代码块、构造器的调用优先级【超级重点】一、类变量/静态变量(static)(一)类变量......
  • Postman接口测试工具详解
    引言随着互联网技术的不断发展,API(应用程序接口)在现代软件开发中的地位愈发重要。API连接了不同的软件系统,允许它们之间进行数据交换和功能调用。为了确保API的正确性和可靠性,进行全面的测试至关重要。Postman作为一个流行的API开发和测试工具,以其直观的用户界面和强大的......
  • java 时间段划分 1.把一个时间段划分为 整天 和非整天的时间段 2. 把List<Loca
     时间段划分  1.把一个时间段划分为整天和非整天的时间段  例如: "2024-07-1108:30:00" ~   "2024-07-2308:30:00";例如 完整的日期:2024-07-122024-07-132024-07-142024-07-152024-07-162024-07-172024-07-182024-07-192024-07-202024-07-21202......
  • 计算机毕业设计-基于Java+SSM架构的珠宝首饰交易平台系统项目开发实战(附源码+论文)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • 宏观层面理解Java IO
    什么是IO简单来说就是输入和输出,体现了数据的流动。从不同的视角来看,IO有不同的解释直观层面在日常生活中,键盘鼠标,显示器音响打印机,这些就属于IO设备,人机交互的过程中,需要我们对计算机输入指令,计算机给我们输出内容,声音文字视频等等。计算机视角在计算机视角,任何涉及到CPU与......
  • Java数组篇[1]:数组的定义和声明
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • Java数组篇[2]:数组的初始化
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......