数据库连接是非常宝贵的系统资源,连接一次数据库,底层程序需要经过很多步骤,花费比较多的时间,如果每次要操作数据库的时候才开始建立数据库连接,用完之后再关闭连接,势必造成程序的效率问题。
连接池的基本原理是,先初始化一定的数据库连接对象,并且把这些连接保存在连接池中。当程序需要访问数据库的时候,从连接池中取出一个连接,数据库操作结束后,再把这个用完的连接重新放回连接池。
当然以上我说的是只是一个最简单的工作原理,连接池本身是比较复杂的,里面涉及到并发的控制,连接的提取,回收算法,连接不够时的相应等等。
package test;
import java.sql.*;
import java.util.*;public class DBConnpool
{private int inUse = 0;private Vector<Connection> connections = new Vector<Connection>();private String poolname = "dbconnpool";private String dbid = "jdbc:mysql://localhost:3306/teasystem";private String drivername = "com.mysql.jdbc.Driver";private String username = "root";private String password = "123";private int maxconn = 5000;public DBConnpool(){}public void setdbid(String dbid){this.dbid = dbid;}public void setusername(String username){this.username = username;}public void setpassword(String password){this.password = password;}public void setmaxconn(int maxconn){this.maxconn = maxconn;}public String getdbid(){return dbid;}public String getusername(){return username;}public String getpassword(){return password;}public int getmaxconn(){return maxconn;}//将连接返还给连接池public synchronized void reConnection(Connection conn){Connection con = conn;connections.addElement(con);inUse--;}//从连接池获取一个连接public synchronized Connection getConnection(){Connection con = null;if(connections.size()>0){con = (Connection)connections.elementAt(0);connections.removeElementAt(0);try{if(con.isClosed()){con = getConnection();}}catch(Exception e){e.printStackTrace();}}else if(maxconn == 0||inUse<maxconn){con = newConnection();}if(con != null){inUse++;}return con;}private Connection newConnection(){Connection con = null;try{Class.forName(drivername);con = DriverManager.getConnection(dbid,username,password);}catch(Exception e){e.printStackTrace();return null;}return con;}public synchronized void closeConn(){Enumeration allConnections = connections.elements();while(allConnections.hasMoreElements()){Connection con = (Connection)allConnections.nextElement();try{con.close();}catch(SQLException e){e.printStackTrace();}}}
}
使用连接池,把暂时不使用的链接放入连接池,到需要使用的时候,从连接池中取出链接使用

数据库连接池的优点和原理相关推荐

  1. 数据库连接池的实现及原理

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...

  2. 何为数据库连接池?其工作原理是什么?

    连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用.当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接.当这个连接使用完毕后,将返回到连接池中,等待为 ...

  3. mysql连接池的原理_数据库连接池的实现及原理

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...

  4. 用了这么久的数据库连接池,你知道原理吗?

    作者:敦格 原文:https://blog.csdn.net/shuaihj/article/details/14223015 这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及 ...

  5. 线程池的优点及其原理,代码实现线程池。简单、明了。

    一 使用线程池的好处 池化技术应用:线程池.数据库连接池.http连接池等等. 池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率. 线程池提供了一种限制.管理资源的策略. 每个线程池 ...

  6. 【数据库连接池的好处及原理】

    数据库连接池是一个连接数据库的缓存池,用于管理和分配数据库连接对象.它的主要好处包括: 提高性能:数据库连接池可以在程序启动时预先建立一定数量的数据库连接对象,这些连接对象可以被多个线程共享,避免了频 ...

  7. 数据库连接池并发的实现原理

    1 . 概述和说明  在数据库操作中,和数据库建立连接(Connection)是最为耗时的操作之一,而且数据库都有最大连接数目的限制, 如何很多用户访问的是同一数据库,所进行的都是相同的操作,比如查询 ...

  8. (二)Druid数据库连接池如何获取Connection原理和源码分析?

    (1)获取连接方法getConnectionDirect()线程: 这里是Druid的三个核心线程的交互逻辑图 ⚠️这里是init();初始化在这一步:主要核心就是创建这几个线程 createAndL ...

  9. 数据库连接池原理及常用连接池介绍

    一.背景介绍 1.1 什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个. 1.2 为什么要使用连接池 数据库连接是一种关键的有 ...

最新文章

  1. 我现在的vimrc配置文件
  2. 猫眼、淘票票两虎相争:下沉市场、服务、内容成决胜关键
  3. Spring JDBC-Spring事务管理之ThreadLocal基础知识
  4. 定制圆角带背景色的矩形边框
  5. NOI.AC-random【期望概率,统计】
  6. 用poi-3.6-20091214.jar 实现java给excel资料加密
  7. SRL——无人机区域定位系统
  8. Perl程序设计中常用的函数
  9. python or 运算符 用作判断两变量的真假
  10. 苹果电脑屏幕刷新率如何调整
  11. mono:利用wxWindows开发界面程序
  12. 如何批量将 Txt 文本文档转换为 PDF 文档
  13. 硬盘安装linux镜像文件iso安装,通过ISO文件硬盘安装Ubuntu系统
  14. cl.3hh.win/index.php,windows 系统下 安装 gitblit 教程
  15. 29、浏览器缓存的原理
  16. WORD中的多级列表详解
  17. 编辑距离算法之Jaro-Winkler Distance
  18. matlab对一组数据傅里叶变换,如何对一组数据进行离散傅里叶变换
  19. 1、C++一些小的知识点之怎么表示e的x次方
  20. [JsonSchema] JsonSchema对比 (Java 版)

热门文章

  1. 「Java」冒泡排序
  2. Magnetic Actuation Systems for Miniature Robots: A Review
  3. 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架
  4. 物联网企业争抢「两轮车换电」赛道
  5. 浙江大学pat 1013
  6. K-Means(K均值) 算法
  7. w500 安装 gentoo相关优化
  8. 计算机应用投稿建议,计算机类核心期刊投稿心得【转】 - 计算机软件及计算机应用 - 电子技术及信息科学 - C......
  9. 计算机软件和应用审稿可以加急吗,计算机类期刊审稿周期
  10. 硬件电子开发常用工具