一、为什么使用数据源和连接池

现在开发的应用程序,基本上都是基于数据的,而且是需要频繁的连接数据库的。如果每次操作都连接数据库,然后关闭,这样做性能一定会受限。所以,我们一定要想办法复用
数据库的连接。因此针对这种情况,提出了数据源和连接池的概念。使用数据源和连接池可以达到复用数据库连接的目的。

二、数据源和连接池概念

其实,数据源和连接池是两个不同的概念。有些人会把它们弄混。
数据源是用来连接数据库,获得Connection 对象的,在Java 中使用javax.sql.DataSource接口来表示。有了数据源,我们就不需要再编写其他连接数据的代码,直接从数据源获得连接就可以了。而且,不管使用什么样的数据库,都使用一样的方式获得数据库连接对象。那么数据源的对象是如何获得的呢?一般是由容器来创建的,我们在程序中使用JNDI 来获取。通过数据源创建的连接对象可以被自动放入连接池中统一管理

连接池是用来管理Connection 对象的,连接池可以从数据源中获得连接,连接池中可以有若干个数据库连接对象,这些连接对象可以被重用。应用程序需要连接时,就向连接池申请,如果连接池中有空闲的连接,就会分配给应用程序,如果没有,可能就需要在等待队列里等待。而如果从连接池中获得了一个连接对象,等到使用完毕之后,通过调用Connection 的close()方法,就可以将连接还给连接池,这样这个连接对象就又编程空闲的了,可以等待下一次请求。而连接池中的连接对象将一直保持与数据库的连接,这样,就避免了频繁的连接和关闭。但是,这些连接对象会占用一定的内存空间。所以,我们要根据数据库的并发访问量,和服务器的硬件条件来决定连接池中的最大连接数。

三、数据源和连接池,一个是用来创建连接对象的,一个是用来管理连接对象的

四、在Tomcat 中配置数据源

4.1在Tomcat 中使用数据源的步骤如下:

  • (1)在Tomcat 中加入数据库驱动文件
  • (2)配置Tomcat 的conf/context.xml
<Context>
<Resource name="jdbc/books"
auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="pbdevj" password="pwd1234"
driverClassName="oracle.jdbc.OracleDriver "
url="jdbc:oracle:thin:@localhost:1521:orcl "/>
</Context>
属性名称 说明
name 指定Resource 的JNDI 名称
auth

指定管理Resource 的Manager(Container:由容器创建
和管理|Application:由Web 应用创建和管理)

type 指定Resource 所属的Java 类
maxActive 指定连接池中处于活动状态的数据库连接的最大数目
maxIdle 指定连接池中处于空闲状态的数据库连接的最大数目
maxWait

指定连接池中的连接处于空闲的最长时间,超过这个时
间会抛出异常,取值为-1,表示可以无限期等待

  • (3)配置应用程序的web.xml 文件(可选)(注:新版本的Tomcat 不需要如下配置)

  • (4)使用JNDI 获取连接对象
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
//…
Context ic = new InitialContext();
DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/books");
Connection connection = source.getConnection();

JDBC五数据源和数据池(web基础学习笔记十一)的更多相关文章

  1. JSP实现数据保存(web基础学习笔记四)

    session对象: //服务端设置Session属性 session.setAttribute("user", username); //客户端接收Session Object ...

  2. JSP实现数据传递(web基础学习笔记三)

    get和post的区别: JSP内置对象: 1)out内置对象:out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的.out对象用于向客户端浏览器输出数         ...

  3. JDBC二查询(web基础学习笔记八)

    一.建立数据库 --创建news表空间 CREATE TABLESPACE tbs_news DATAFILE 'F:\ORACLE\news.dbf' SIZE 10M AUTOEXTEND ON; ...

  4. JDBC一(web基础学习笔记七)

    一.JDBC Java数据库的连接技术(Java DataBase Connectivity),能实现Java程序以各种数据库的访问 由一组使用Java语言编写的类和接口(JDBC API)组成,它j ...

  5. JDBC四(web基础学习笔记十)

    一.增加 .修改.删除.查询 将功能整合在一个类中 package pb.base; import java.sql.Connection; import java.sql.DriverManager ...

  6. JDBC三(web基础学习笔记九)

    一.JDBC编程步骤 二.将数据库的信息放入资源文件 // (1)使用Class.forName来导入drive Class.forName("oracle.jdbc.driver.Orac ...

  7. JSP的范围-作用域(web基础学习笔记五)

    JSP的范围(作用域) 在JSP页面中的对象,包括用户创建的对象如JavaBean,都有一个范围属性,这个范围也被叫做“作用域”.范围定义了在什么时间内,在哪一个JSP页面中可以访问这些对象.例如,s ...

  8. 页面可视化编辑ckeditor(web基础学习笔记十五)

    一.CKedit下载ckedit 下载地址:http://ckeditor.com/ 二.ckedit的引入 2.1.解压并将ckedit复制到项目中 2.2.在页面中引入 在页面头部加入 <s ...

  9. Servlet一(web基础学习笔记二十)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

随机推荐

  1. 【NOIP2014】生活大爆炸版石头剪刀布

    石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的石头剪 ...

  2. Codeforces Round #234 (Div. 2) B. Inna and New Matrix of Candies SET的妙用

    B. Inna and New Matrix of Candies time limit per test 1 second memory limit per test 256 megabytes i ...

  3. Unity3D中的UnitySendMessage方法的使用

    UnitySendMessage(“string”,“string”, ***),这是方法,我们至少需要传入两个参数,第一个参数为unity中的一个gameobject名称,第二个参数为这个gameo ...

  4. 使用LibZ合并.Net程序集,支持WPF

    最近写了一个小的WPF程序,发布的时候发现依赖着两三个20~30k的小dll的,感觉有点不爽,就想把它合并一下.以前在WinForm下用过微软的ILMerge合并程序集,不过记得它对WPF程序支持不大 ...

  5. QCon大会上推荐阅读的10本书

    QCon北京2014大会将于4月25-27日在北京国际会议中心盛大开幕.QCon是由@InfoQ 主办的全球顶级技术盛会.在此次盛会中,现场将有@人民邮电出版社-信息技术分社 主办的现场扫描二维码赠书 ...

  6. Tasker to detect and vibrate once the ougoing call is being answered

    I happen to find that for GSM standard phone, call duration would be created into sql database only ...

  7. jquery easyui combobox设置默认选中第一项

    combobox的内容是从后台获取的json, js截取: var data = $('#id').combobox('getData'); $("#id ").combobox( ...

  8. golang 字符串与整数, 布尔转换 strconv

    strconv 是golang对于字符串和基本数据类型之间的转换字符串转整数testStr := "1000" testInt, err := strconv.Atoi(testS ...

  9. 关于OPC Client 编写

    昨天又有人问我 OPC Client 编写,实际是他们不了解OPC 客户端的工作原理,要想写客户端程序,必须知道OPC对象, OPC逻辑对象模型包括3类对象:OPC server对象.OPC grou ...

  10. Entityframework:启用延时加载的主意事项(只为强化记忆)

    Check List 无参的.高于私有访问级别的构造方法(经常忘记). 非封闭的类(默认的非封闭的). DbContext 配置要开启(默认是开启的). 因为我喜欢将类型设置为封闭的,提供有参数的构造 ...