首页 > 数据库 >Java使用数据库连接池

Java使用数据库连接池

时间:2024-03-22 10:24:45浏览次数:15  
标签:Java 数据库 resultSet catch close 连接 连接池

一、原生JDBC操作数据库的步骤

(1)加载数据库驱动。

(2)获取数据库连接。

(3)预编译SQL语句。

(4)执行SQL。

(5)获取结果集。

(6)释放资源。

示例代码如下:

public class JDBCTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        String url = "jdbc:mysql://localhost:3306/manage";

        String user = "root";

        String password = "123456";

 

        // (1)加载数据库驱动。 mysql 5后已无需手动注册

        Class.forName("com.mysql.jdbc.Driver");

        // (2)获取数据库连接。

        Connection conn = DriverManager.getConnection(url,user,password);;

        // (3)预编译SQL语句。

        String sql = "SELECT * FROM page_test where id = 1 ";

        PreparedStatement statement = conn.prepareStatement(sql);

        // (4)执行SQL。

        ResultSet resultSet = statement.executeQuery();

        // (5)获取结果集。

        if(resultSet.next()){

            System.out.println("id:"+resultSet.getInt("id"));

            System.out.println("name:"+resultSet.getString("name"));

            System.out.println("age:"+resultSet.getInt("age"));

        }

        // (6)释放资源。

        conn.close();

        statement.close();

    }

}

测试结果如下

 

二、问题分析

使用原生JDBC操作数据库,可以正确获取到结果,可是也存在一些问题。每操作一次数据库比如增、删、改、查,都需要创建数据库连接,使用完成之后在释放资源。使用时创建连接,使用完毕后销毁连接。这样频繁地创建、销毁过程是非常消耗系统时间和资源的。当大量用户操作需要访问数据库时,每次都要进行数据库连接对象的创建和销毁,对系统来性能说是一种大量的消耗。

三、数据库连接池的引入

如何解决上面存在的问题呢?

这时就可以使用数据库连接池。数据库连接池是用来分配、管理、释放数据库连接对象的容器,它允许应用程序重复使用同一个数据库连接对象。常用的数据库连接池有C3P0,DPCP,druid(德鲁伊)。

四、连接池的工作原理

简单理解就是在项目初始化的时候,一次性创建一些可用的连接。某一次操作数据库需要使用连接时直接从连接池中获取,操作完成之后再将连接归还到连接池中。这样就可以起到资源重用的作用。

 

五、连接池的优势

.a.提高性能:连接池可以避免频繁创建和销毁数据库连接的开销,从而提高数据库访问性能。

.b.资源管理:连接池可以限制并发连接数,防止过多的连接导致数据库性能下降或崩溃。

.c.连接复用:连接池可以重复利用已经建立的连接,减少连接建立和认证的时间。

.d.连接管理:连接池可以监控和管理连接的状态,确保连接的可用性和稳定性。

 

六、Java中如何使用连接池

.a.导入druid连接池对应的Maven依赖;

 <!-- Druid 数据源依赖 -->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>druid</artifactId>

        <!-- 需要确认最新的稳定版 -->

        <version>1.2.9</version>

</dependency>

.b.编写配置文件,添加必要的配置。

druid.properties

配置内容如下:

#driverClassName这一项也可以不配置

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/testtest

username=root

password=123456

#初始化建立连接个数

initialSize=5

#最大连接池数量

maxActive=10

#获取连接最大等待时间

maxWait=3000

#不在使用

maxIdle=6

#最小连接池数量

minIdle=3

.c.编写工具类读取配置文件,获取连接。

public class DruidDataSourceUtils {

 

    private static DataSource ds;

 

    /** 加载配置文件 */

    static {

        try {

            Properties info = new Properties();

            // 加载类路径下,配置文件  /druid.properties 表示当前类的路径下的配置文件

            info.load(DruidDataSourceUtils.class.getResourceAsStream("/druid.properties"));

            // 读取属性文件,创建连接池

            ds = DruidDataSourceFactory.createDataSource(info);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    /** 获取连接 */

    public static DataSource getDataSource() {

        return ds;

    }

 

    // 获取连接

    public static Connection getConnection() {

        try {

            return (Connection) ds.getConnection();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            // e.printStackTrace();

            throw new RuntimeException(e);

        }

    }

 

    /** 释放连接资源 */

    public static void close(Connection connection, Statement statement,

                             ResultSet resultSet) {

        if (resultSet != null) {

            try {

                resultSet.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (statement != null) {

            try {

                statement.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (connection != null) {

            try {

                connection.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

 

    /** 释放连接资源 */

    public static void close(Connection connection, Statement statement) {

        close(connection, statement, null);

    }

}

七、连接池的参数配置

最大连接数:连接池中允许存在的最大连接数量。

最小空闲连接数:连接池中保持的最小空闲连接数量。

最大空闲连接数:连接池中保持的最大空闲连接数量。

连接超时时间:连接在池中的最长空闲时间,超过该时间未被使用则会被回收。

连接生命周期:连接被创建后的最长生命周期,超过该时间连接会被关闭和重新创建。

 

测试结果如下:

 

 

总结: 池化技术在开发中的应用很广泛,不光是数据库连接池,redis连接数据库的时候,也在使用连接池。使用池化技术可以提高性能,节省资源,降低系统开销;简化代码。因此在开发中推荐使用池化技术,提高系统性能。

参考博客: https://developer.aliyun.com/article/1002335

标签:Java,数据库,resultSet,catch,close,连接,连接池
From: https://www.cnblogs.com/yilangcode/p/18088848

相关文章

  • Day01 文学生也想学java之今天我也许学能学会Markdown
    Day01文学生也想学java之今天我也许学能学会Markdown1.标题一级标题:#+(空格)+标题内容二级标题:##+(空格)+标题内容......(以此类推)2.字体helloworld!:前后两个*helloworld!:前后一个*helloworld!:前后三个*helloworld!:前后两个~3.引用这是一句引用:引用=>+(空格)4.分割线---+......
  • 数据库设计基础
    数据库设计基础数据库的基本概念数据(Data)是数据库存储的基本对象,是描述事物的符号记录。数据库(DataBase)是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根......
  • 毕业设计课题:实验室课程管理系统,基于java+SSM+mysql
          一、前言介绍     如今互联网发展迅猛,大量的信息都是通过网络这一渠道来传播,所以利用网络渠道来传播知识是非常有前景的。线上管理系统的主要目的是对实验室课程信息进行更有效的管理,光靠现有的管理方式是远远不够的,因此开发实验室课程管理系统是有必要的......
  • 毕业设计课题:少儿编程管理系统,基于java+SSM+mysql
          一、前言介绍     21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发少儿编程管理系统意义和用处有哪些呢? ......
  • Jackson进行JSON序列化/反序列化添加Java 8的日期和时间库支持
     添加依赖包<!--Jackson进行JSON序列化/反序列化添加Java8的日期和时间库支持--> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> ......
  • Amazon Aurora Limitless Database :数据库管理的全新境界
    在当今数亿用户、PB级数据和数百万交易的业务环境中,数据库管理面临着巨大的挑战。传统数据库扩展的繁琐性和耗时性使得许多组织需要花费数月甚至数年的时间来构建自定义软件以满足其极端的工在当今数亿用户、PB级数据和数百万交易的业务环境中,数据库管理面临着巨大的挑战。 ......
  • 基于Springboot的瑜伽馆管理系统的设计与实现(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的瑜伽馆管理系统的设计与实现(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构......
  • 基于Springboot的闲置图书分享(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的闲置图书分享(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界......
  • Java内存马1-传统web内存马
    1、前置知识(1)TomcatTomcat是一个开源的、轻量级的、用于JavaServlet和JavaServerPages(JSP)的Web应用程序服务器。它是Apache软件基金会的一个项目,也是最流行的Servlet容器之一,适用于开发和部署各种类型的JavaWeb应用程序。Tomcat负责管理Servlet的生命周期,包括加载、初始化......
  • 前端基础之JavaScriptDOM和BOM
    一、JavaScript的组成JavaScript的实现包括以下3个部分:ECMAScript(核心)描述了JS的语法和基本对象文档对象模型(DOM)处理网页内容的方法和接口浏览器对象模型(BOM)与浏览器交互的方法和接口核心(Core):核心部分包括语言的基本语法、数据类型、控制结构等。这些......