TOMCAT数据库连接池。
如果数据库连接池仅仅是对特定的项目作用,则可以采用如下配置方案:
1、在自己的项目中的 META-INF 文件夹下面新建 context.xml,贴入类似如下代码:
- <?xml version=’1.0′ encoding=’utf-8′?>
 - <Context path=”/tuanplus” docBase=”tuanplus” debug=”5″
 - reloadable=”true” crossContext=”true”>
 - <Resource name=”jdbc/tuanplus” auth=”Container” type=”javax.sql.DataSource”
 - maxActive=”100″ maxIdle=”30″ maxWait=”10000″ username=”root” password=”fkeuggwn”
 - driverClassName=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/tuanplus” />
 - </Context>
 
<?xml version='1.0' encoding='utf-8'?> <Context path="/tuanplus" docBase="tuanplus" debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/tuanplus" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="fkeuggwn" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/tuanplus" /> </Context>
解释一下:
path:指定此数据源的作用地址,一般是自己项目的path
docBase:项目名称
name:此数据源的名称,以后java代码中获取数据源依据此名称
auth:未知作用,一般都指定Container,是容器的意思
type:无疑,javax.sql.DataSource
maxActive:最大活跃连接数,最多保持这么多连接
maxIdle:最大空闲连接数目,空闲连接大于此值的时候都会被close
maxWait:请求的最大等待时间
2、在 web.xml 中加入如下代码:
- <resource-ref>
 - <description>Tuanplus JDBC</description>
 - <res-ref-name>jdbc/tuanplus</res-ref-name>
 - <res-type>javax.sql.DataSource</res-type>
 - <res-auth>Container</res-auth>
 - </resource-ref>
 
<resource-ref> <description>Tuanplus JDBC</description> <res-ref-name>jdbc/tuanplus</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
解释一下:
description:描述信息,相当于注释
res-ref-name:需要引入的连接池的名称,即 context.xml 中的 name.
res-type:依旧无疑,javax.sql.DataSource
res-auth:Container,容器
3、编写 java 代码,这里顺便引入一个我觉得比较不错的数据库操作的 Helper 类
Db.java
- package com.tuanplus.util;
 - import java.sql.Connection;
 - import java.sql.PreparedStatement;
 - import java.sql.ResultSet;
 - import java.sql.SQLException;
 - import javax.naming.Context;
 - import javax.naming.InitialContext;
 - import javax.naming.NamingException;
 - import javax.sql.DataSource;
 - public class Db {
 - private Connection conn;
 - /**
 - * 初始化操作,得到connection..
 - */
 - public Db() {
 - try {
 - InitialContext ictx = new InitialContext();
 - Context envContext = (Context) ictx.lookup(“java:/comp/env”);
 - DataSource ds = (DataSource) envContext.lookup(“jdbc/tuanplus”);
 - conn = ds.getConnection();
 - } catch (NamingException e) {
 - e.printStackTrace();
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - }
 - /**
 - * 执行插入、更新、删除操作
 - *
 - * @param sql
 - * @param args
 - * @return
 - */
 - public boolean update(String sql, Object… args) {
 - try {
 - PreparedStatement ps = conn.prepareStatement(sql);
 - for (int i = 0; i < args.length; i++) {
 - ps.setObject(i + 1, args[i]);
 - }
 - if (ps.executeUpdate() < 1) {
 - return false;
 - }
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - return true;
 - }
 - /**
 - * 执行查询
 - *
 - * @param sql
 - * @param args
 - * @return
 - */
 - public ResultSet query(String sql, Object… args) {
 - try {
 - PreparedStatement ps = conn.prepareStatement(sql);
 - for (int i = 0; i < args.length; i++) {
 - ps.setObject(i + 1, args[i]);
 - }
 - return ps.executeQuery();
 - } catch (SQLException e) {
 - e.printStackTrace();
 - }
 - return null;
 - }
 - }
 
package com.tuanplus.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class Db {
	private Connection conn;
	/**
	 * 初始化操作,得到connection..
	 */
	public Db() {
		try {
			InitialContext ictx = new InitialContext();
			Context envContext = (Context) ictx.lookup("java:/comp/env");
			DataSource ds = (DataSource) envContext.lookup("jdbc/tuanplus");
			conn = ds.getConnection();
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 执行插入、更新、删除操作
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public boolean update(String sql, Object... args) {
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			if (ps.executeUpdate() < 1) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return true;
	}
	/**
	 * 执行查询
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public ResultSet query(String sql, Object... args) {
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			return ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}
构造函数中的内容即使通过连接池获取 connection 连接。
4、编写测试 JSP,需要注意的是,测试必须在服务器下进行。
- <%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
 - <%@page import=”com.tuanplus.util.Db”%>
 - <%
 - String path = request.getContextPath();
 - String basePath = request.getScheme() + “://”
 - + request.getServerName() + “:” + request.getServerPort()
 - + path + “/”;
 - %>
 - <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
 - <html>
 - <head>
 - <base href=”<%=basePath%>”>
 - <title>My JSP ‘index.jsp’ starting page</title>
 - <meta http-equiv=”pragma” content=”no-cache”>
 - <meta http-equiv=”cache-control” content=”no-cache”>
 - <meta http-equiv=”expires” content=”0″>
 - <meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
 - <meta http-equiv=”description” content=”This is my page”>
 - <!–
 - <link rel=”stylesheet” type=”text/css” href=”styles.css”>
 - –>
 - </head>
 - <body>
 - <%
 - Db db = new Db();
 - boolean i = db.update(“INSERT INTO user VALUES(null,?,?,?)”,
 - “mzule”, “123456″, “888888@qq.com”);
 - %>
 - <%=i%>
 - </body>
 - </html>