【创作赢红包】JDBC的“那些事“之数据库连接池

这篇具有很好参考价值的文章主要介绍了【创作赢红包】JDBC的“那些事“之数据库连接池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mysql版本:8.0.26
可视化客户端:sql yog
编译软件:IntelliJ IDEA 2019.2.4 x64
运行环境:win10 家庭中文版
jdk版本:1.8.0_361


前言

Druid是阿里巴巴开源的一个高性能的JDBC连接池,它不仅提供了基本的连接池功能,还具有SQL监控,防御SQL注入攻击,数据源监控,配置灵活等优点,往往是是开发者与数据库连接交互的不二选项。本篇简要介绍阿里Druid技术的相关使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据库连接池是什么?

👉百度百科对该词条的解释如下:

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

👉用通俗的话来讲:

假设存在一个存储着一定数量的数据库连接对象的缓冲区,该缓冲区会事先准备好一些数据库连接对象,等用户需要时,就会从池中拿一个现成的数据库连接对象给用户使用,用完之后,用户就把借用的连接对象放回到连接池中,其他人下次也可以用。这个缓存区就是数据库练接池。

概念示意图如下所示:
【创作赢红包】JDBC的“那些事“之数据库连接池

💡备注:

当池中的连接对象都被分配出去了,会申请新的数据库连接对象加入,但是数量不会超过上限,假如池中的数据库连接对象的总个数到达上限,那么不能在增加了,如果此时池中的连接对象都被分配出去了,有新用户要申请连接对象,只能等待或者失败。


二、为什么要用数据库连接池?

👉原因:

Java程序 和 mysql服务器相当于C/S结构的网络应用程序,而且是基于TCP/IP协议的网络应用程序,每一次Java程序要与mysql服务器通信(执行sql),都需要先建立连接,然后才能通信。

💡小tips:

TCP/IP协议(面向连接的可靠的基于字节流的传输控制协议):要求先三次握手,通过后才能正式建立连接,用完了,还要四次挥手,释放连接。

👉目的:

为了节省时间开销,提高利用率

👉好处:

  1. 可以更快高效的分配连接给用户
  2. 连接用完,可以放回池中,重复利用率高
  3. 连接池设有上限,不会轻易崩溃

👉特别说明

数据库连接池是在应用程序服务器中,不是mysql服务器中。


三、有哪些数据库连接池技术?

👉市面上常见的数据库连接池技术如下:

  1. C3P0C3P0是一个开源的JDBC连接池,具有高度的可配置性和稳定性。
  2. DBCPDBCP也是一个开源的JDBC连接池,具有高度的可配置性和稳定性,但是性能较C3P0稍差。
    3. HikariCPHikariCP是一个高性能的JDBC连接池,具有快速启动和响应时间,是目前最快的连接池。
  3. Tomcat JDBC PoolTomcat JDBC Pool是一个Apache Tomcat的JDBC连接池实现,具有高度的可配置性和可扩展性。
  4. DruidDruid是一种高性能的JDBC连接池,具有监控、防御SQL注入攻击等功能,是阿里巴巴开源的一个项目。

💡ps: 本文以阿里的Druid数据库连接池技术举例叙述


四、如何使用Druid数据库连接池技术?

👉步骤:

🏆 1. 引入Druid的jar包,放到项目的jdbclibs 文件中,重新添加Libriaries中

【创作赢红包】JDBC的“那些事“之数据库连接池

💡 ps:
添加到libraries的步骤和添加Junite的jar包步骤一样,暂不赘述,如有不懂,可参考我的相关博文《Java SE:JUnit快速入门指南》

🏆2.编写配置文件,做法如下(两种方式选其一即可)

①做法:在src下加一个druid.properties文件

【创作赢红包】JDBC的“那些事“之数据库连接池

②做法:在模块根目录下,再建一个文件夹config,把config文件设置为源代码文件夹,Mark directory as Source
Root,最后在config文件夹下面建一个druid.properties文件

【创作赢红包】JDBC的“那些事“之数据库连接池

这样做的 目的是把配置文件和.java 文件分开放,编译后在一起。

👉上述druid.properties文件中的内容该填什么?

以我自己的案例代码演示如下:

#key=value
driverClassName=com.mysql.cj.jdbc.Driver  //指定驱数据库驱动的名称
url=jdbc:mysql://0225db:3306/atguigu?serverTimezone=UTC&rewriteBatchedStatements=true   //指定连接数据库的url
username=root    //指定连接数据库的用户名
password=123456   //指定密码
initialSize=5   //初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive=10   //最大连接池数量
maxWait=1000   //等待时间,如果超过1000毫秒还没有分配到连接,就报异常

【创作赢红包】JDBC的“那些事“之数据库连接池

🏆 3. 创建数据库连接池对象

工厂模式,通过工厂类的静态方法,创建连接池对象。

🏆 4. 获取连接

案例:连接数据库,使用多线程,模拟给15个用户每人一个连接对象

代码演示如下:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class TestDruid {
    static int i=1;
    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties properties=new Properties();
        
        //TestDruid.class.getClassLoader()获取当前类的类加载器
        properties.load(TestDruid.class.getClassLoader().getResourceAsStream("druid.properties"));//getResourceAsStream() 返回读取指定资源的输入流
        //properties.load()行读取properties配置文件,分隔成两个字符串key和value,将他们放进Properties对象中。
        
        DataSource ds= DruidDataSourceFactory.createDataSource(properties);//创建数据库连接池
 /*       Connection conn = ds.getConnection();//只能拿一个连接对象
        System.out.println(conn);*/

        //按顺序在连接池中循环拿15个连接对象,就不使用多线程,直接for循环去拿

        //如果不希望按顺序从连接池中拿连接
        for ( ;i <= 15 ; i++) {

            //这里使用多线程,模拟给15个用户每人一个连接对象
            new Thread() {
                @Override
                public void run() {
                    try
                    {
                        Connection conn = ds.getConnection();//在连接池中获取连接对象
                        System.out.println(this.getName()+"获取"+"第" + i + "个连接:" + conn);

                        Thread.sleep(100);//获取到连接持续100ms,然后就丢回连接池中
                        conn.close();//这里不是断开连接,还给连接池
                    } catch(SQLException | InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                }
            }.start();//启动线程

        }




        //上面的代码等价于下面的代码

/*      Class.forName("com.mysq1.cj.jdbc .Driver");
        String url = "jdbc:mysql://localhost:3306/atguigu?serverTimezone=UTc";
        Connection conn = DriverManager.getConnection(url,"root",  "123456");
        System.out.println(conn);*/



    }


}


【创作赢红包】JDBC的“那些事“之数据库连接池

💡注意:

		//加载配置文件
        Properties properties=new Properties();
        
        //TestDruid.class.getClassLoader()获取当前类的类加载器
        properties.load(TestDruid.class.getClassLoader().getResourceAsStream("druid.properties"));//getResourceAsStream() 返回读取指定资源的输入流
        //properties.load()行读取properties配置文件,分隔成两个字符串key和value,将他们放进Properties对象中。
        
        DataSource ds= DruidDataSourceFactory.createDataSource(properties);//创建数据库连接池
 		Connection conn = ds.getConnection();//只能拿一个连接对象
        System.out.println(conn);

上面的代码等价于下面的代码文章来源地址https://www.toymoban.com/news/detail-408398.html

 		Class.forName("com.mysq1.cj.jdbc .Driver");//加载驱动
        String url = "jdbc:mysql://localhost:3306/atguigu?serverTimezone=UTc";//指定url
        Connection conn = DriverManager.getConnection(url,"root",  "123456");//获取连接对象
        System.out.println(conn);

到了这里,关于【创作赢红包】JDBC的“那些事“之数据库连接池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库——JDBC基本连接步骤

    目录 JDBC概念: JDBC保姆级连接步骤: JDBC连接中用到的对象详解: 1.DriverManager对象(驱动管理对象) 2.Connection对象(连接对象) 3.Statement对象(执行SQL语句的对象) 4.ResultSte对象(结果集) JDBC的全称是:Java数据库连接(Java DataBase Connectivity),它是一套用于执行SQL语句的Jav

    2024年02月07日
    浏览(47)
  • 通过JDBC连接数据库并用Java把数据写入数据库

    目录 1.新建项目 2.在src包下新建lib包,用来存放jar包(下载对应jar包复制到lib包里) 3.右键导入的jar包,找到并单击\\\"添加到库\\\"(add....) 4.在src包下新建bean包,新建class类 5.class类中写数据库表中对应的列名的set get方法、空参、有参(String方法)注意:类名为私有类(private),新建类时数

    2024年02月02日
    浏览(47)
  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(78)
  • JDBC p5 数据库连接池

    传统的JDBC数据库使用 DriverManager 来获取, 每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证IP地址,用户名和密码(0.05 ~ 1 s 时间) 。需要数据库连接的时候,就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成服务器崩溃。

    2024年02月15日
    浏览(38)
  • JAVA连接数据库 JDBC编程

    提供修改数据库和查询数据库的代码,两者只有很细微的差别         注意在进行连接数据库首先你得下载你对应MYSQL版本的JDBC驱动包,比如MYSQL8.0版本的你就要下载MYSQL8.0版本的JDBC驱动包,MYSQL5.1版本的你就要下载MYSQL5.1版本的JDBC驱动包 我下载的8.0版本的驱动包就是这个

    2024年02月15日
    浏览(38)
  • eclipse使用jdbc连接数据库

    下载和mysql对应版本的jar包。 我的mysql下载的8.0.13版本的,所以下载8.0.13的jar包。官网下载地址: https://dev.mysql.com/downloads/connector/j/?os=26 (如果需要下载历史版本,点击 archievs) 下载之后,解压目录,获得jar包。 导入jarb包。 第一步:在eclipse中新建工程JDBC,建立一个lib目录

    2024年02月11日
    浏览(41)
  • Java-JDBC连接数据库

    目录 一、JDBC开发步骤 1.Java程序连接数据库 1.1引入MySQL驱动包 1.2Java连接MySQL步骤 2 实现增删改查操作 2.1 添加数据 2.2 修改数据 2.3 删除数据 2.4 查询数据 二、JDBC处理相关问题 1 解决SQL注入问题 1.1、问题演示 1.2、解决问题 2 JDBC事务处理 3 获取自增长键值 4 批处理操作 1.1 引入

    2024年02月09日
    浏览(31)
  • 【JDBC】Java连接MySQL数据库

    数据库编程指的是通过编程语言与数据库进行交互和操作的过程,包括使用编程语言创建、连接、查询、更新和删除数据库中的数据,以及管理数据库结构和其他相关工作等。 另外,不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包

    2024年02月15日
    浏览(41)
  • java连接mysql8.0数据库—jdbc连接

    mysql官网 点击platform Independent ,然后出现jar包选项 点download 点左下角no thanks,直接下载 原始方法,直接在项目下建一个lib包 然后将刚刚下好的zip解压,复制jar包到该目录下,右键jar包,选择add as Library 出现一堆包,表示成功导入jar包 注意:Driver类创建时,要导入com.mysql.cj.

    2024年02月13日
    浏览(45)
  • 数据库--教务管理系统(数据库部分--Java-jdbc连接)

    我所设计的教务管理系统包括6大部分,学生信息、教师信息、课程信息、班级信息、选课信息、教授信息。该系统可以通过不同的群体进行操作:学生群体可以对个人信息、班级、教师信息进行查询操作,对于课程则可以进行选课操作;教师群体可以个人信息、班级信息、学

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包