又配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>

解释一下:

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>

解释一下:

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;
	}
}

构造函数中的内容即使通过连接池获取 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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值