简单的数据库连接池模拟(Java)

简单模拟实现数据库连接池 模拟数据库连接池的操作流程: 创建一个数据库连接池 初始10个连接对象 来一个客户端,从连接池里取 当客户用完了,则不是真的销毁,而是放入到连接池中 注意:未重的方法没有复制上来 连接池类 ----FastConnectionPool import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLExce... 阅读详情

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

       根据自己浅显的Java数据库知识理解写出来连接池模拟: 

package com.softeem.t1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;

/**
 * @ Author Jack Smith 2020/8/6 19:05
 */
public class Tools {

    private static String DRIVER_CLASS;
    private static String URL;
    private static String USER;
    private static String PASSWORD;
    public static int MAXCONN;
    static Map<Connection,Boolean> map = new HashMap<>();

    static {
        try {
            //尚未赋予值,具体数值根据实际情况决定
            InputStream is = Tools.class.getResourceAsStream("/jdbc.properties");
            Properties p = new Properties();
            p.load(is);

            DRIVER_CLASS = p.getProperty("driver");
            URL = p.getProperty("url");
            USER = p.getProperty("user");
            PASSWORD = p.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置最大连接数目
     *
     * @param num
     */
    public static void setMaxActive(int num) {
        for (int i = 0; i < num; i++) {
            try {
                Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
                //将可用(空闲)连接设为属性true
                map.put(conn,true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取空闲连接
     *
     * @return
     */
    public static synchronized Connection getConnection() {
        for (Map.Entry<Connection, Boolean> entry : map.entrySet()){
            if(entry.getValue()){
                map.put(entry.getKey(),false);
                return entry.getKey();
            }
        }
        throw new RuntimeException("服务器忙...");
    }

    public static void close(Connection conn) {
        Connection conn2=null;
        try {
            conn.close();
            map.put(conn,true);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

注:
    导师指导下完成,如有雷同,那就是一个老师教的
    代码有许多不足,欢迎留言讨论和更正

第一篇:常见CAN错误帧及其排查方向 在本文中主要阐述各类错误帧的形成原因以及在使用同星硬件设备出现错误帧时,应当 如何进行排查并消除错误帧。在 CAN 总线通信中,通常遇见的错误帧主要为以下五种,其 分别是:bit error、ACK error、stuff error、CRC error 以及 form error。 阅读详情

相关推荐

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

Java数据库连接池原理机制的详细讲解

本文讨论的连接池包括一个连接池类(DBConnectionPool)和一个连接池管理类(DBConnetionPoolManager)。连接池类是对某一数据库所有连接的“缓冲池”,主要实现以下功能:从连接池获取或创建可用连接;使用完毕之后,把连接返还给连接池;在系统关闭前,断开所有连接并释放连接占用的系统资源;还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时、通讯问题,并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值。

【故障诊断】非洲秃鹫算法AVOA优化Transformer柴油机故障诊断分类【含Matlab源码 6430期】.zip

CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白;1、完整的代码压缩包内容主函数:main.m;调用函数:其他m文件;无需运行 运行结果效果图;2、代码运行版本Matlab 2024b;若运行有误,根据提示修改;若不会,私信博主;3、运行操作步骤步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果;4、仿真咨询如需其他服务,可私信博主或扫描博客文章底部QQ名片;4.1 博客或资源的完整代码提供4.2 期刊或参考文献复现4.3 Matlab程序定制4.4 科研合作

Java中的连接池

连接池是一种缓存技术,用于管理数据库连接的创建、分配和回收。它的核心思想是在应用程序启动时预先创建一组数据库连接,并将这些连接存储在一个池中。当应用程序需要与数据库交互时,从池中获取一个空闲连接,而不是每次都新建和销毁连接。这样做的好处是减少了频繁创建和销毁连接带来的开销,提高了应用程序的性能和资源利用效率。大家在日常开发中,使用数据库连接池是提高应用程序性能的重要手段。理解连接池的工作原理和优化技巧,可以帮助我们更好地应对高并发和高负载的场景。以上就是今天的分享,希望对大家有所帮助。

weixin_46372265的博客 1179

java 数据库连接池简单实现

一、背景 数据库连接池的实现,在一般的Javaweb项目中,持久层框架基本已经实现好,开发者只需要关心增删改查操作即可。不过公司项目的需求多样性和复杂性是很难预料的,我目前做的项目我认为需要自己来做一个简单的线程池来维护。我的项目需求是这样的:前端通过传入一个标识:code,后端通过code查询出一条数据,此条数据中包括了另一个数据库的 链接方式,包括IP,username,pa...

qq_34297563的博客 1031

java数据库连接池技术简单使用

JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.itheima.pool.MyPool; ...

weixin_33712881的博客 176

数据库连接池 原理 示例

import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Enu...

专注于python & java 437

Java 进阶篇】JDBC 数据库连接池详解

数据库连接池是一种维护数据库连接的技术,它允许应用程序在需要时从池中获取数据库连接,并在不需要连接时将其释放回池中。这种技术的主要目的是减少每次访问数据库时都要创建和销毁连接的开销,从而提高性能和资源利用率。数据库连接池是提高数据库访问性能和效率的重要工具,它可以有效地管理数据库连接,减少了连接的创建和销毁开销,提高了应用程序的性能。本文介绍了数据库连接池的概念、原理和使用方法,以及一些常见的配置参数和注意事项。希望读者可以通过本文更好地理解和使用数据库连接池,从而提升应用程序的数据库访问性能。作者信息。

繁依Fanyi的博客 1362

Java数据库连接池简单模拟(等待/通知模式,多线程)

数据库连接池 Java对于数据库的操作,需要创建相应的数据库连接,connection的创建和释放是耗时的。于是有了数据库连接池,提前创建好若干connection,需要用就去池子里面取,不用了直接放回池子就OK,之后可以供他人使用。 Java常用的数据库连接池有DBCP、C3P0等等 等待/通知经典范式 等待方: 1.获取对象锁 2.while循环判断条件是否满足,不满足则调用对象的wait方法,进入等待队列 3.被通知后依然检查条件是否满足,满足则执行后续逻辑 synchronized (对象){

liuyubupt的博客 399

mysql数据库事务模拟转账_MySQL_(Java)连接池】使用DBCP简单模拟银行转账事物

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;public classJDBC01 {public static ...

weixin_39952800的博客 100

JAVA 简单连接池实现

1.定义连接池类 package com.whx.conpool; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; import javax.xml.ws.FaultAction; import com.mysql.jdbc.Connection; publ...

dzh145的专栏 465

mysql数据库连接池原理_数据库连接池原理分析及模拟实现

数据库访问​访问数据库主要有以下几个步骤:加载数据库驱动创建数据库连接执行访问操作并处理执行结果关闭连接,释放资源​ 在每一次请求数据库都要经历上述过程,创建连接和释放资源也都是些重复性的动作,当请求量比较大时,资源是个很大的浪费。如何优化呢,可以使用连接池连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲...

weixin_42139357的博客 266

什么是数据池?-简单的例子

什么是数据池?前言:关于数据池的概念简单数据池的实现不使用数据池的情况:使用数据池的情况: 前言: 本文参考:https://segmentfault.com/a/1190000013308078 关于数据池的概念 连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回...

void的博客 9120

JDBC连接MySQL数据库使用(详解)c

JDBC连接MySQL(详解)(Java database connectivity) 使用jdbc连接操作MySQL数据库,为五步: 1加载(注册)驱动程序,需要下载对应数据库的驱动jar包放在项目中 (为什么要下载驱动,就像鼠标和键盘,要用鼠标和键盘,就要有鼠标和键盘的驱动,数据库也如此jar包的版本要与Mysql数据库的版本一致或者大于数据库的版本) ...

Chenge_Deng的博客 757

自定义连接池

public class Pool { //1.连接池大小 private final int poolSize; //2.连接数组对象 private Connection[] connections; //3.连接状态数组 0 表示空闲,1 表示繁忙 private AtomicIntegerArray status; //4.构造方法初始化 public Pool(int poolSize) { this.poolSize = poolSize; this.connection

Neayom 220

Java模拟简易数据库连接池

数据库连接池的好处: 对于一个简单数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,频繁的建立、关闭连接,会极大的降低系统的性能,因为数据库的连接是非常耗时的操作,所以可能对于数据库连接就成了系统性能的瓶颈。  此处,编一个简单数据库连接池,理解数据库连接池...

ToBe_Coder的博客 1389

惭愧啊,一个都不会

2010-09-13 适合Java新人练习的几个题 1、    完成一个多线程的WebServer,可以完成文件的列表清单和文件浏览功能。支持图片、html等不同文件类型 目的:理解HTTP协议,WebServer的基本原理。 2、    通过自定义ClassLoader实现类的动态加载 目的:理解JAVA ClassLoader的装载机制和Class的作用域范畴。 3...

我想去华为 137

Java实现简单数据库连接池

1 引言 对于数据库连接池,相信大家都不会陌生,当下流行的连接池也有很多(如:DBCP,C3P0等),使用连接池可以在程序中给我们带来极大的方便,也可以有效的减少创建连接给我们带来的开销,前段时间公司的项目中有用到DBCP连接池,所以在闲暇之余,自己也尝试着一个简易数据库连接池,当然如果对数据库连接池不是很懂的话,建议参考Connection Pooling with Connector/J

Banboll 斑驳 1071

Java 模拟数据库连接池 + 模拟ORM框架

模拟数据库连接池 JDBC六部曲中,获取连接的步骤是最为耗时的,最慢的;所以,数据库连接池就是为了解决这个很慢的问题 先想一下下面的问题: 一个连接Connection不能被多个用户同时共用(以防产生数据紊乱)【锁】 对于某一个连接,用户如何知道当前这个连接是否可用?【标记:给连接标记一个状态】 但是怎么把连接和标记放在一起呢? 第一个方案:创建一个类(有Connection属性和状态属性) 第二个方案:创建一个数组Connection[],在创建一个数组byte[],两者分别存放连接和状态,并且互相对应

Zhangguohao666的博客 958

实现一个简单数据库连接池

说明 看到团长公众号的文章,自己参照完成一个简单数据库连接池 正文 ConnPool 连接池类必须实现javax.sql.DataSource接口 package com.datasource.connpool; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter;

wds的博客 1万+

java数据库连接池的实现

java数据库连接池的实现 今天我们模拟实现数据库连接池的功能: 连接池比较典型的应用有数据库连接池数据库连接是一种关键的有限的昂贵的资源,连接是有限的,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接...

qq_32445069的博客 536
上一篇: Java之JDBC操作数据库
下一篇: HTML,CSS和JavaScript综合练习之日历
东学芳华
博客等级 码龄8年 1粉丝 9原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值