2019独角兽企业重金招聘Python工程师标准>>>

一、数据库连接池

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

二、原理

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

三、C3P0数据源

这里主要介绍C3P0开源数据库连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。

1.配置信息p3p0.propertise

#jdbc基本信息
driverClass = com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbcUrl = jdbc:sqlserver://127.0.0.1:1435; DatabaseName = OMIMS
user = houxue
password = asd123#c3p0连接池信息
c3p0.minPoolSize = 3
c3p0.maxPoolSize = 25
c3p0.initialPoolSize = 10
c3p0.maxStatement = 20#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
c3p0.acquireIncrement = 3
#定义在从数据库获取新连接失败后重复尝试的次数
c3p0.acquireRetryAttempts = 60
#两次连接中间隔时间,单位毫秒
c3p0.acquireRetryDelay = 1000
#连接关闭时默认将所有未提交的操作回滚
c3p0.autoCommitOnClose = false
#当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒
c3p0.checkoutTimeout = 3000
#每120秒检查所有连接池中的空闲连接。Default: 0
c3p0.idleConnectionTestPeriod = 120
#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
c3p0.maxIdleTime = 600
#如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
c3p0.testConnectionOnCheckin = true
#c3p0将建一张名为c3p0TestTable的空表,并使用其自带的查询语句进行测试。
jdbc.automaticTestTable = c3p0TestTable

2.配置数据库连接信息ConfigUtil.java

package com.sdust.omims.db.utils;import java.io.FileInputStream;
import java.util.Properties;/*** 配置数据库连接信息* * @author Shmily* @version 1.0*/
public class ConfigUtil {// 配置文件的所有信息private static Properties c3p0Pro = null;// 配置文件中关于C3P0的信息private static Properties c3propes = null;// 配置文件中关于JDBC的信息private static Properties jdbcpropes = null;// 初始化配置文件代码块static {initDBSource();}/*** 读取配置文件*/public static final void initDBSource() {c3p0Pro = new Properties();try {// 加载配置文件c3p0Pro.load(new FileInputStream("./properties/c3p0.properties"));} catch (Exception e) {e.printStackTrace();}jdbcpropes = new Properties();c3propes = new Properties();for (Object key : c3p0Pro.keySet()) {String skey = (String) key;if (skey.startsWith("c3p0.")) {c3propes.put(skey, c3p0Pro.getProperty(skey));} else {jdbcpropes.put(skey, c3p0Pro.getProperty(skey));}}}/*** 获取配置文件的所有信息* * @return c3p0Pro 配置文件的所有信息*/public Properties getConfiguration() {return c3p0Pro;}/*** 获取C3P0配置信息* * @return c3propes C3P0配置信息*/public Properties getC3P0Propes() {return c3propes;}/*** 获取JDBC配置信息* * @return jdbcpropes JDBC配置信息*/public Properties getJDBCPropes() {return jdbcpropes;}}

3.创建数据库连接DBUtil.java

package com.sdust.omims.db.utils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.DataSources;/*** 数据库工具类 封装数据库访问的相关内容,并提供一组数据库操作方法* * @author Shmily*/
public class DBUtil {private static final String JDBC_DRIVER = "driverClass";private static final String JDBC_URL = "jdbcUrl";// 数据库连接配置信息ConfigUtil configUtil = null;Connection dbConnection = null;ResultSet dbResultSet = null;Statement dbStatement = null;boolean isConfigured = false;boolean isDriverLoaded = false;boolean isConnected = false;boolean isStatementCreated = false;/*** 加载数据库驱动*/public void loadDriver() {if (!isConfigured) {getConfiguration();isConfigured = true;}String driverClass = configUtil.getConfiguration().getProperty(JDBC_DRIVER);if (driverClass != null) {try {// 加载驱动类Class.forName(driverClass);} catch (ClassNotFoundException e) {e.printStackTrace();}}isDriverLoaded = true;}/*** 获取C3P0配置信息*/public void getConfiguration() {configUtil = new ConfigUtil();}/*** 获取数据库连接*/public void getConnectioned() throws Exception {if (!isDriverLoaded) {loadDriver();isDriverLoaded = true;}DataSource ds = null;// 建立连接池DataSource unPooled = DataSources.unpooledDataSource(configUtil.getConfiguration().getProperty(JDBC_URL), configUtil.getJDBCPropes());ds = DataSources.pooledDataSource(unPooled, configUtil.getC3P0Propes());dbConnection = ds.getConnection();isConnected = true;}}

转载于:https://my.oschina.net/NorthOcean/blog/261116

JDBC:使用连接池管理连接相关推荐

  1. Java hdfs连接池_Java使用连接池管理Hdfs连接

    记录一下Java API 连接hadoop操作hdfs的实现流程(使用连接池管理). 以前做过这方面的开发,本来以为不会有什么问题,但是做的还是坑坑巴巴,内心有些懊恼,记录下这烦人的过程,警示自己切莫 ...

  2. JAVA怎么连接华为的HDFS系统_Java使用连接池管理Hdfs连接

    记录一下Java API 连接hadoop操作hdfs的实现流程(使用连接池管理). 以前做过这方面的开发,本来以为不会有什么问题,但是做的还是坑坑巴巴,内心有些懊恼,记录下这烦人的过程,警示自己切莫 ...

  3. 连接池以及连接池的使用

    目录 什么是连接池? 为什么要使用连接池 连接池分类 连接池的核心对象 连接池对象 连接池工具类,深入理解: 连接池工具类全部代码: 什么是连接池? 一种存放数据库连接的容器,并且拥有动态新增连接.管 ...

  4. HttpClient连接池的连接保持、超时和失效机制

    HTTP是一种无连接的事务协议,底层使用的还是TCP,连接池复用的就是TCP连接,目的就是在一个TCP连接上进行多次的HTTP请求从而提高性能.每次HTTP请求结束的时候,HttpClient会判断连 ...

  5. JDBCC3P0连接池Druid连接池

    typora-root-url: img typora-copy-images-to: img JDBC&连接池 回顾 会使用mysql字符串函数 CONCAT: 连接字符串 CHAR_LEN ...

  6. java长连接转短连接_java原生程序redis连接(连接池/长连接和短连接)选择问题...

    原标题:java原生程序redis连接(连接池/长连接和短连接)选择问题 最近遇到的连接问题我准备从重构的几个程序(redis和mysql)长连接和短连接,以及连接池和单连接等问题用几篇博客来总结下. ...

  7. 浅谈各种连接池中连接数量的设置

    连接池中连接数量的配置 我们日常开发中经常会用到各种连接池,比如httpclient和jediscluster以及druid等数据库连接池,当使用这些连接池的时候我们总是很疑惑到底要怎么配置连接池中连 ...

  8. JDBC连接池c3p0连接异常和日志处理

    1.c3p0连接数据库由于时区没限制报出的错误 代码: package C3P0;import com.mchange.v2.c3p0.ComboPooledDataSource; import co ...

  9. jdbc如何使用oracle数据库连接池,使用JDBC连接池技术连接Oracle数据库

    在使用JDBC连接数据库要用到两个jar包 1.编写配置文件 #驱动地址 driverClassName=oracle.jdbc.OracleDriver #连接地址 url=jdbc:oracle: ...

最新文章

  1. 【Away3D代码解读】(四):主要模块简介
  2. 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理)
  3. c语言程序设计A课程试,自学考试有关论文范文,与C语言程序设计A课程辅导相关硕士毕业论文范文...
  4. Spring Ioc源码分析 之 Bean的加载(4):实例化Bean(createBeanInstance()方法)
  5. 如何弹出一个模式窗口来显示进度条 .
  6. 苹果手机连接电脑一直噔噔蹬的响,而且没有反应
  7. 创建虚拟机与安装系统
  8. 书评《鸟哥的Linux私房菜 基础学习篇》第四版
  9. MATLAB---CAD绘制Bezier曲线算法
  10. Python 中 appium 环境搭建
  11. 鸿蒙系统hdc,HDC2020有看头:要揭开鸿蒙系统和EMUI11神秘面纱?
  12. HTML5期末大作业:基于HTML+CSS+JavaScript实现中国风文化传媒企业官网源码
  13. 如何快速制作Gif动图
  14. 信息学奥赛一本通(c++):1000:入门测试题目
  15. 维吉尼亚密码及其破解
  16. 矛盾依旧脱欧协议过关难 欧盟认为英将延后脱欧
  17. python3实现sm2加密和签名
  18. 人人极客专访 | 我和我们的操作系统
  19. POJ 1737 Connected Graph(组合)
  20. 【笔记】Armv8-A virtualization

热门文章

  1. 密码危机:深度学习正在加速密码破解!
  2. 斯坦福年度AI报告:人工智能全面逼近人类能力
  3. Stuart Russell:智能本质和人工智能安全的巨大挑战
  4. 业界首个!华为联合中国信通院等发布《网络体系强基展望白皮书》
  5. ​​《自然》2020年十大科学发现出炉:病毒,冷冻电镜与快速射电暴
  6. 《城市大脑全球标准研究报告》发布会将于12月23号在北京举办
  7. 自动驾驶技术如何升级?这份技能图谱为你指路
  8. 你所未知的人工智能应用领域
  9. 苹果新功能惹众怒,4000 多家组织和个人签署公开信,敦促苹果放弃“儿童安全”功能...
  10. 那些逃离互联网大厂的年轻人