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】数据库连接池技术的更多相关文章

  1. java数据库连接池技术原理(浅析)

    在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池 ...

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

    JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStateme ...

  3. Java数据库连接池详解

    http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...

  4. Java学习:数据库连接池技术

    本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...

  5. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  6. Java数据库连接池

    转载过来的,最近在做一个小网站,准备使用这种方法.     Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...

  7. java数据库连接池dbcp的使用

    近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式 ...

  8. 基于JDBC的数据库连接池技术研究与应用

    引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...

  9. Java数据库连接池封装与用法

    Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...

随机推荐

  1. 底部菜单栏(三)Fragment+FragmentTabHost实现仿新浪微博底部菜单栏

    一.实现效果图 二.项目工程结构 三.详细代码编写 1.主tab布局界面,main_tab_layout: 双击代码全选 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  2. UVA10518 - How Many Calls?(矩阵高速幂)

    UVA10518 - How Many Calls?(矩阵高速幂) 题目链接 题目大意:给你fibonacci数列怎么求的.然后问你求f(n) = f(n - 1) + f(n - 2)须要多少次调用 ...

  3. oracle5

    oracle中事务处理 什么是事务 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据操作语言:增删改,没有查询)语句要么全部成功,要么全部失败. 如:网上转账就是典型的要用事 ...

  4. LabVIEW的错误簇以及错误处理函数

    我们可以在LabVIEW的Modern>>Array, Matrix & Cluster控件面板找到表示错误簇数据类型的错误输入(Error In)以及错误输出(Error Out ...

  5. hadoop错误Operation category READ is not supported in state standby

    报如下错误 解决方法: 方法一:(结果不起作用) 通过Shell命令方式,hadoop/bin/hdfs haadmin -failover --forceactive hadoop2 hadoop1 ...

  6. PureMVC(JS版)源码解析(七):Mediator类

    之前的博文中,我们分析了SimpleCommand类和MacroCommand类,这两个类用作"业务逻辑(business logic)"处理,今天,我们讲一些和UI界面相关联的M ...

  7. java命名规则

    java变量命名是不能以#开头的.Java变量的命名规则如下:$ .字母.下划线开头都行,不能以数字开头 后面的可以是数字.字母.下划线, 其他的命名方式,都会报错,且不能运行. 以字母.下划线( _ ...

  8. 调用支付宝接口Android客户端没有支付宝APP的情况下解决无法调用支付宝页面的问题

    这几天一直研究支付宝接口调用,因为当前应用中需要调用支付宝接口作移动支付. 遇到一个问题困扰几天,就是当我们的手机端未安装支付宝APP的时候,需要在自己应用中调用支付宝的登陆网页进行支付.我是Andr ...

  9. wpf viewmodel之间的通信

    使用Prism第三方框架实现ViewModel之间的通信 创建类继承自UnityBootstrapper public class Bootstrapper : UnityBootstrapper { ...

  10. 5 DML语言

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...