JAVA基础知识之JDBC——JDBC数据库连接池
JDBC数据库连接池
数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接,使用完关闭,需要使用时又重新连接。这将严重影响系统性能。
为了解决这个问题,JDBC2.0引入了数据库连接池。当程序启动时,系统预先创建一批数据库连接对象,形成一个连接池。当程序请求连接时,不需要重新打开物理数据库连接,而是从连接池中获取一个连接,使用完之后,也不是直接关闭物理数据库连接,而是将这个连接对象再次放入连接池。通过使用连接池,大大提高程序性能。
JDBC提供了连接池接口,即javax.sql.DataSource. 一些商用服务器(例如WebLogic, Websphere)提供了具体实现。另外也有一些开源组织提供了实现,例如DBCP和C3P0)
DBCP数据源
这是apache针对JDBC的DataSource接口的开源实现,Tomcat的连接池就是使用它来实现的。
要使用DBCP,需要在工程类库中加入,commons-dbcp.jar和commons-pool.jar两个包。
典型的用法如,
- // 创建连接池连接对象
- BasicDataSource ds = new BasicDataSource();
- // 连接池的数据库配置信息
- ds.setDriverClassName("com.mysql.jdbc.Driver");
- ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
- ds.setUsername("root");
- ds.setPassword("pass");
- // 设置连接池的初始连接数
- ds.setInitialSize(5);
- // 设置连接池最多可以有多少个活动连接
- ds.setMaxActive(20);
实际应用中,建议将连接池对象设置为static,这样在需要使用数据连接的地方,只需要通过ds获取一个连接池中的连接即可,使用完之后再放回连接池,
- //从连接池中拿出一个连接来使用
- Connection conn = ds.getConnection();
- //并非关闭物理连接,而是把连接对象放回连接池
- conn.close();
C3P0连接池
C3P0不仅可以自动清理不再使用的Connection,还可以清理Statement和ResultSet.因此Hibernate就推荐使用它。
要使用C3P0,只需要在工程中引入c3p0-xxxx.jar包即可,典型用法跟DBCP差不多,
- ComboPooledDataSource ds = new ComboPooledDataSource();
- // 连接池的数据库配置信息
- ds.setDriverClassName("com.mysql.jdbc.Driver");
- ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
- ds.setUsername("root");
- ds.setPassword("pass");
- // 设置连接池的初始连接数
- ds.setInitialSize(40);
- // 设置最大连接数
- ds.setMaxPoolSize(2);
- // 设置最小连接数
- ds.setMinPoolSize(2);
- // 设置连接池缓存Statement的最大数
- ds.setMaxStatements(180);
- Connection conn = ds.getConnection();
JAVA基础知识之JDBC——JDBC数据库连接池的更多相关文章
- Java基础知识(多线程和线程池)
新建状态: 一个新产生的线程从新状态开始了它的生命周期.它保持这个状态直到程序 start 这个线程. 运行状态:当一个新状态的线程被 start 以后,线程就变成可运行状态,一个线程在此状态下被认为 ...
- 数据库连接JDBC和数据库连接池C3P0自定义的java封装类
数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...
- Java -- JDBC 学习--数据库连接池
JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 使用Java中的动态代理实现数据库连接池
2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- 学习Spring必学的Java基础知识(2)----动态代理
Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
随机推荐
- java中的Comparable接口
类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...
- 两个NOI题目的启迪8皇后和算24
论出于什么原因和目的,学习C++已经有一个星期左右,从开始就在做NOI的题目,到现在也没有正式的看<Primer C++>,不过还是受益良多,毕竟C++是一种”低级的高级语言“,而且NOI ...
- 总结:客户端与服务器端使用正则增加URL参数的方法
先说服务器端的: C#版本 #region URL参数操作 /// <summary> /// URL参数操作 /// </summary> public class UrlP ...
- ACM集训的1B。。。。黑色星期五。。。。2333333
题目: 印象中有好多个13号是星期五,13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900 ...
- DataTables样式
Styling 官方链接 AdminLTE HTML代码 <div class="row"> <div class="col-xs-12"&g ...
- python中常用的模块的总结
1. 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件.(例如:文件名:test.py,对应的模块名:test) ...
- mysql用户密码修改,用户添加、删除及设置权限
一下的示例所用用户名和密码为:test,111111 Mysql密码修改: Mysql修改密码需要root的权限,先执行mysql -uroot -p(密码); 1)使用set password方式来 ...
- how-to-install-siege-on-centos-7
https://www.joedog.org/siege-home/ https://roastahost.com/how-to-install-siege-on-centos-7/ (Works!) ...
- gradle使用
查看子工程引用的jar包 gradle child_project:dependencies > dep.txt
- Adobe AIR对本地文件(XML文件)的操作
引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/ Air的文件操做主要涉及两个类,FIle和FileStrea ...