jdbc和数据库连接池_数据库连接池满了

jdbc和数据库连接池_数据库连接池满了数据库连接池JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按照以下步骤:在主程序(如servlet beans)中建立数据库连接进行sql操作断开数据库连接这种模式开发,存在的问题:普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(大概花费0.05s-1s),需要数据库连接的时候,就向数据库要求一个,执行完成后再断开。这样的方式将会消耗大量的时间。数据库的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

数据库连接池


JDBC数据库连接池的必要性
在使用开发基于数据库的web程序时,传统的模式基本是按照以下步骤:

  1. 在主程序(如servlet beans)中建立数据库连接
  2. 进行sql操作
  3. 断开数据库连接

这种模式开发,存在的问题:

  • 普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(大概花费0.05s-1s),需要数据库连接的时候,就向数据库要求一个,执行完成后再断开。这样的方式将会消耗大量的时间。数据库的连接资源并没有得到很好地利用。
  • 对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄露,最终将导致重启数据库。
  • 这种开发不能控制被创建的连接对象数,系统资源会被毫不顾忌的分配出去,如连接过多,也可能导致内存泄露,服务器崩溃。

数据库 连接池技术
基本思想:为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕后再放回去。
数据库连接池负责分配,管理和释放数据库连接。它允许应用程序使用一个现有的数据库连接,而不是重新建立一个。

JDBC的数据库连接池使用DataSource来表示,DataSource只是一个接口。该接口通常由服务器提供实现,也有一些开源组织提供实现。

数据库连接池的优点
在这里插入图片描述


DBCP C3P0 Druid是主要的三个数据库连接池技术


c3p0

package com.atguigu4.connection;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;
import org.junit.Test;

import java.sql.Connection;

public class C3P0Test { 
   
    @Test
    public void testGetConnection() throws Exception{ 
   
        //获取c3p0数据库连接池
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        cpds.setDriverClass("com.mysql.jdbc.Driver");
        cpds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        cpds.setUser("root");
        cpds.setPassword("924930871111");
        //设置初始时数据库连接池中的连接数
        cpds.setInitialPoolSize(10);

        Connection connection = cpds.getConnection();
        System.out.println(connection);
        //销毁c3p0连接池
        DataSources.destroy(cpds);
    }
}

配置文件


    <!-- 配置c3p0的基本信息 -->
    <named-config name="helloc3p0">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123</property>
        <!--当数据库连接池中的连接数不够时,c3p0一次性向数据库服务器申请的连接数-->
        <property name="acquireIncrement">3</property>
        <!--c3p0初始化时的连接数-->
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">2</property>
        <property name="maxPoolSize">10</property>
        <!--连接池最多维护的Statement个数-->
        <property name="maxStatements">50</property>
        <!--每个连接中最多可以使用的Statement的个数-->
        <property name="maxStatementsPerConnection">2</property>
    </named-config>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168939.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • React教程(详细版)

    React教程(详细版)一、简介(背景)1.1、概念它是一个将数据渲染为HTML视图的js库1.2、原生js痛点用dom的API去操作dom,繁琐且效率低用js直接操作dom,浏览器会进行大量的回流和重绘原生jjs没有组件化的编程方案,代码复用性低,哪怕有模块话的概念,但模块化也只能拆解一个个js,对样式和结构也没办法拆解,组件化就相当于3剑客整体拆解,成为一个个的小功能1.3、React特点采用组件化模式,声明式编码,提高开发效率和组件复用性在ReactNative中可以用react预发进行安卓、io

    2022年7月16日
    15
  • 二代身份证校验[通俗易懂]

    二代身份证校验[通俗易懂]百度一搜就能搜到很多身份证校验的例子,这个是最近做项目参考百度文库的demo修改后的一,js:[code="js"]//身份验证functioncheckIdCard(idCard){ varsexId; varsexText; varage; varErrors=newArray("验证通过!","身份证号码位数不对!","身份证号码出生…

    2022年6月27日
    28
  • java保存数据到session中_java session如何存取数据

    java保存数据到session中_java session如何存取数据展开全部javasession存取数据的方法:session存数32313133353236313431303231363533e58685e5aeb931333363376461据方法:publicvoidsetAttribute(Stringname,Stringvalue)方法,设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性在会话范围内已经存在,则更改该…

    2022年7月12日
    14
  • 关于gsync 和 freesync[通俗易懂]

    关于gsync 和 freesync[通俗易懂]最近我的很多朋友都在问我怎么开启gsync以及gsync的作用还有些小伙伴的台式机有freesync我就随便说下要是有不对的希望各位大佬指正首先我们先了解下垂直同步:1、什么是垂直同步?普通情况下显卡是逐行扫描到显示器,这就导致前面一帧还没扫完下一帧就上去了,因此会产生撕裂,垂直同步则是让显卡去适应显示器,即显示器每次刷新的时候显卡再把算好的图像传给显示器。…

    2022年5月1日
    403
  • LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)

    LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)

    2021年7月4日
    90
  • outputstreamwriter.write_InputStreamReader

    outputstreamwriter.write_InputStreamReader|–字符流(字符流=字节流+编码表。)|–字符输入流Reader——抽象类intread():一次读取一个字符intread(char[]chs):一次读取一个字…

    2022年9月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号