數據庫的使用中一定會有四個步驟,那就是:(1)、註冊驅動,(2)、數據庫的連接,(3)、數據庫的操作,(4)、數據庫的關閉。然而在這四個步驟中,(1)(2)(4)往往是一樣的,只有(3)是不一樣的,也就是說會有很多的重複,在使用中這樣就會影響到系統的性能,爲了提高系統的性能,所以就產生了Tomcat數據源(當然,除了有Tomcat實現連接池之外,還有其他實現數據庫連接池的組件),其核心原理是:在一個對象池中保存多個數據庫的連接,這樣在以後進行數據庫的連接時,直接在連接池中取出一個數據庫的連接,當數據庫的操作完成之後,再將此連接放回到數據庫的連接池中,等待其他用戶的繼續使用。
先看一下如何配置數據庫的連接池:即在server.xml文件中配置一個Mysql數據庫連接池,配置語句如下:
- <Context path="/demo" docBase="D:\webDemo" reloadable="true">
- <Rersource
- name="jdbc/mldn" <-- 配置一個名稱爲jdbc/mldn的數據庫連接池資源 -->
- auth="Coontainer" <-- 負責資源連接的容器 -->
- type="javax.sql.DataSource" <-- 此數據庫名稱對應的類型是DataSource -->
- maxActive="100" <-- 可以打開的最大連接數 -->
- maxldle="30" <--可以維持的最小連接數-->
- maxWait="10000" <-- 用戶等待的最大時間 -->
- username="root" <-- 數據庫用戶名 -->
- password="Cselmu09" <-- 數據庫密碼 -->
- driverClassName="com.mysql.jdbc.Driver" <-- 數據庫驅動程序 -->
- url="jdbc:mysql://localhost:3308/mldn"/> <-- 數據庫的url值 -->
- </Context>
在web容器中,數據庫的連接池都是通過數據源(javax.sql.DataSource)訪問的,即可以通過javax.sql.DataSource類取得一個Connection對象,但是要想得到一個DataSource對象需要使用到JNDI(Java Naming and Directory Interface,即Java命名及目錄接口)進行查找。
配置web.xml文件:
- <resource-ref>
- <res-ref-name>jdbc/mldn</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
datasource.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@page import="java.sql.Connection"%>
- <%@page import="javax.sql.DataSource"%>
- <%@page import="javax.naming.Context"%>
- <%@page import="javax.naming.InitialContext"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <%
- String DSNAME = "java:comp/env/jdbc/mldn"; //JNDI名稱
- Context ctx = new InitialContext();
- DataSource ds = (DataSource)ctx.lookup(DSNAME);
- Connection conn = ds.getConnection();
- %>
- <h3>數據庫的連接對象如下:<br><%=conn%></h3>
- <%
- conn.close();
- %>
- </body>
- </html>
由上面的例子知道取得數據庫連接的步驟:
- (1)、定義好JNDI名稱:String DSNAME = "java:comp/env/jdbc/mldn"; //JNDI名稱
- (2)、初始化查找上下問的Context對象:Context ctx = new InitialContext();
- (3)、通過JNDI名稱查找DataSource對象:DataSource ds = (DataSource)ctx.lookup(DSNAME);
- (4)、最後通過DataSource對象取得數據庫連接對象:Connection conn = ds.getConnection();