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>