一.原理
首先来看一下JDBC的操作原理和流程:
程序 --> 加载驱动(1)--> 数据库连接(2)--> 数据库操作指令(3)--> 关闭数据库(4)
每一个用户在涉及到操作数据库的动作时都会反复执行以上的流程,但是可以发现,每个用户的区别
在于提交数据的不同或者不同的操作,从而导致了步骤(3)的差异。显而易见的是步骤(1)、(2)、
(4)在每个用户操作的过程中是相同的,所以说如果能省去这些重复的操作将会大大提升性能,这实
质上就直接导致了数据源的产生。
数据源核心原理:在一个对象池中保存多个数据库的连接(数据库连接池),这样以后在操作数据库时候
直接从连接池中取出一个数据库连接,每当数据库操作完成时,这些被拿出来的数据库连接将放回数据库
连接池中,等待其他用户继续使用。
二.Tomcat使用数据库连接池
数据库连接池都是通过javax.sql.DataSource访问的,即可以通过DataSource取得一个
Connection对象。但是想得到一个DataSource对象需要使用JNDI查找。
JNDI服务:
JNDI(Java Naming Directory Interface)Java命名及目录接口。是Java EE 提供的一
个服务,主要功能就是通过一个名称“key”查找到对应的一个对象“value”,这一设计也体现出了Java
程序的设计理念,通过key对应value,只要key不改变,则value可以随意修改。
Tomcat目录/conf/server.xml:
<Context path="/TomcatSource" docBase="E:\MyEclipse WorkSpace\TomcatSource\WebRoot" reloadable="true">
<Resource name="jdbc/ceshi_1"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/ceshi_1"/>
</Context>
由于是在MyEclipse下建立的项目,所有我的docBase直接配置到MyEclipse项目的WebRoot目录下。
虚拟目录/web.xml:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/ceshi_1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
tom.jsp:
<body>
<%
String DSNAME = "java:comp/env/jdbc/ceshi_1" ;
Context ctx = new InitialContext() ;
DataSource source = (DataSource)ctx.lookup(DSNAME) ;
Connection conn = source.getConnection() ;
%>
<h3><%=conn %></h3>
<%
conn.close() ;
%>
</body>