【Java】数据库连接池技术
JDBC的问题
在程序中,我们经常要建立与数据库的连接,之后再关闭这个连接。我们知道,数据库连接对象的创建是比较消耗系统性能的,这些频繁的操作势必会消耗大量的系统资源。因此我们需要采用更高效的数据库访问技术。
数据库连接池的概念
在JDBC2.0中提出了数据库连接池技术,它提供了javax.Sql.DataSource(数据源)接口,它负责建立与数据库的连接。通过客户之间共享一组连接,而不是在它们需要的时候为他们新建立连接,这样就可以改善资源的使用,提高应用程序的响应能力。
连接池技术的核心思想
连接池技术的核心思想是:连接复用。通过建立一个数据库连接池以及一套连接使用、分配、治理策略,是的该连接池的连接可以得到高效、安全的复用,避免了数据库连接的频繁建立、关闭的开销。
基于JDBC的数据库连接池技术
数据库连接池技术是基于JDBC技术的,对JDBC的原始连接进行了封装,从而提高了开发效率。
数据源的创建与JNDI资源
DataSource的创建
DataSource对象由Web容器提供,因此不能再程序中采用创建一个实例的方式来生成DataSource对象。
DataSource的获取
当启动Web容器之后,Web容器创建DataSource对象,之后就通过JNDI技术来获得DataSource对象。
DataSource创建、获取的基本流程
由于DataSource对象是有Web容器提供的,但Web程序不会平白无故的创建DataSource,必须通过一个"消息"通知Web容器要创建数据源对象。通常我们用的Web容器时Tomcat,在Tomcat中这个"消息"就是一个XML配置文件,通过context.xml文件配置数据源。
在Tomcat的安装路径下的conf 目录下有一个context.xml文件。当启动Tomcat后,Tomcat会加载一系列的配置文件,并且解析配置文件中的内容,当然也包括context.xml文件。当Tomcat检查到context.xml文件中有数据源对象的配置时,Tomcat就会跟数据源配置信息创建相应的数据库连接。在创建数据源的过程中,Tomcat会根据配置信息,比如说:数据源的名称、数据源的类型、数据源数据连接的最大数目、数据库连接的最大空闲时间等信息创建出相应的连接,形成数据库连接池。
之后在程序中通过JNDI技术,根据数据源的名称查找到相应的数据库连接池,获取连接,供程序使用。
JNDI的配置
Tomcat把DataSource作为一种可配置的JNDI资源来处理。其配置如下:
<Context>
……
<Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource" maxActive="1000" maxIdle="30" maxWait="10000" username="sa" password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433; DatabaseName=books"
/>
</Context>
通过JNDI在程序中获取DataSource
在程序中,通过javax.naming.Context对象获得DataSource对象,如下:
Context cxt = new InitialContext();
当Web容器加载到该句代码时,当完成创建实例后,Context对象就获取了DataSource对象
之后通过Context对象的lookup方法查找出数据源,该方法的参数是以"java:comp/env"为前缀,以配置文件中的数据源的名称结尾的字符串。如下:
DataSource ds = (DataSource)cxt.lookup("java:comp/env/jdbc/books");
取得一个数据源之后,将其转换为DataSource对象。
获得DataSource之后,便通过DataSource对象取得Connection,如下:
Connection conn = ds.getConnection();
有了Connection对象之后就可以对数据进行其他操作了。
http://blog.163.com/qqabc20082006@126/blog/static/22928525201021661922648/
【Java】数据库连接池技术的更多相关文章
- java数据库连接池技术原理(浅析)
在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池 ...
- java数据库连接池技术简单使用
JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStateme ...
- Java数据库连接池详解
http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...
- Java学习:数据库连接池技术
本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...
- .数据库连接池技术:DBCP和C3P0
数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...
- Java数据库连接池
转载过来的,最近在做一个小网站,准备使用这种方法. Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...
- java数据库连接池dbcp的使用
近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式 ...
- 基于JDBC的数据库连接池技术研究与应用
引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...
- Java数据库连接池封装与用法
Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...
随机推荐
- 最简单的自定义适配器adapter
下面是一个非常简单的自定义适配器的总体源码,从这个源码入门,就可以慢慢学会适配器了 适配器的作用: 完成数据和界面控件的绑定,把数据绑定到界面的现实控件条目上(对于listView,应该是listVi ...
- j2ee学习笔记URLEncoder.encode(String , enc)处理特殊字符
从页面上传递数据时,特殊字符对于超链接会自动进行解码 : 其他方式需要手动进行解码.
- 隐藏元素的宽高无法通过原生js获取的问题
1.起源:移动app项目中,页面加载时需要加载国家下拉列表,将隐藏的透明浮层和一个显示加载过程中的框 显示出来,隐藏的透明浮层设置宽高都是100%即可,而这个加载提示框需要先得出它的宽高,然后再根据页 ...
- J2EE入门必备
1,J2EE是什么 J2EE(Java 2 platform Enterprise Edition)是软件平台,适于创建服务器端的大型应用软件和服务系统. J2EE适合开发大规模的业务系统,这种级别的 ...
- 3. NHibernate基础知识 - 你必须知道的一些事情
首先介绍一下框架结构(这个有个概念就可以): 然后我们会介绍一个很重要的概念(一定要好看)!! 这节对 NHibernate 架构做一个介绍,首先要了解一下该框架在应用程序中的位置: 先来一个简单的图 ...
- SVN配置使用
文档规则 [本地工作区] :work copy ,本地工作副本: [主项目]:引用共用模块的新项目(工程) 最新版本(HEAD revision):版本库里文件或目录的最新版本 SA :SVN服务器的 ...
- Windows10 安装配置IIS,并将程序发布到服务器上
1.确保计算机链接网络(也可在不联网的时候使用安装包进行IIS的安装): 2.打开“控制面板”(“菜单”按钮+x 快捷键)——“程序”——“打开或关闭Windows功能”——展开“Internet信息 ...
- swift 截取字符串
- STP根交换机,指定端口,根端口,阻塞端口
STP判断各交换机端口(指定端口:DP;根端口:RP;阻塞端口:AP) 判断步骤: 1.选举根交换机: 判断对象:所有运行STP协议的交换机中选出一个; 判断依据:交换机中选择网桥ID值(交换机优先级 ...
- php 单引号与双引号区别
一.单引号与双引号区别 1." "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出. 2.' '单引号里面的不进行解释,直接输出. 从字面意思上就可以看出,单引号比双引 ...