以一个简单的数据库表为例来展示创建全局/局部数据源和连接池的配置与测试

</pre>一、创建数据库表并插入数据<p></p><p><span style="white-space:pre"></span>1.创建数据库</p><p></p><pre code_snippet_id="1708236" snippet_file_name="blog_20160605_1_3365042" name="code" class="html">create database studentinfo;

 

2.创建数据库表

create table student( 
	id varchar(8) not null primary key, 
	name varchar(20) not null, 
	sex varchar(10) not null, 
	major varchar(30) not null, 
	hometown varchar(30) not null );

3.插入数据

insert into student(id, name, sex, major, hometown) 
		   values(‘1’, ‘zhangsan’, ‘male’, ‘Software Engineering’, ‘China’);
二、配置Tomcat文件

全局配置(使用全局配置时,需要在tomcat的lib目录下添加mysql的驱动jar包。否则就会有异常)

1.配置conf目录下的server.xml

在<GlobalNamingResources>标签下添加如下代码

<span style="white-space:pre">	</span><Resource name="jdbc/TestDB" 
				auth="Container"
				type="javax.sql.DataSource"
				driverClassName="com.mysql.jdbc.Driver"
				url="jdbc:mysql://localhost:3306/studentinfo"
				username="root"
				password=""
				maxActive="100"
				maxIdle="30"
				maxWait="10000" />
name:指定连接池的名称(一般起名为"jdbc/***")

auth:管理者,一般选择默认

type:指定连接池的类,它负责连接池的事务处理

driverClassName:指定连接数据库使用的驱动

url:指定要连接的数据库

username:数据库用户名

password:数据库密码

maxActive:指定连接池的最大连接数(达到最大连接数后,再建立连接,会报异常)

maxIdle:指定连接池连接的最大空闲数(当关闭数据库时(此时并没有断开连接,而是将他们放回连接池),连接池中最多可以有的空闲连接数)

maxWait:建立连接的最大等待时间(如果超过此时间,将受到异常)

当连接池中没有空闲连接,而且连接数没有达到maxActive并发的最大连接时,则从连接池中建立新的连接。

2.配置conf目录下的context.xml文件

在<context>标签下添加如下代码

<ResourceLink name="jdbc/TestDB" 
					  type="javax.sql.DataSource"
					  global="jdbc/TestDB"/>


局部配置

1.在你的javaweb工程的WebRoot目录下的WEB-INF目录下创建context.xml并填写如下代码

<?xml version='1.0' encoding='utf-8'?>

<Context>

	<Resource name="jdbc/TestDB" auth="Container"
				type="javax.sql.DataSource"
				driverClassName="com.mysql.jdbc.Driver"
				url="jdbc:mysql://localhost:3306/studentinfo"
				username="root"
				password=""
				maxActive="100"
				maxIdle="30"
				maxWait="10000" 
				
				/>
</Context>

无论全局还是局部配置都需要修改web.xml文件(而且两者修改的内容一致),所以就不再重复。

在你的web.xml添加代码,效果如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/mysql</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>
</w


注:局部配置有可能出现异常Cannot create JDBC driver of class '' for connect URL 'null',如果出现这种异常,请使用全局配置,如果有其他更好的解决办法,请私信告诉我,谢谢。

三、书写jsp代码进行测试

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>mysql连接池测试</title>
  </head>
  
  <body>
  	<%
  		Connection conn = null;
  		PreparedStatement pstm = null;
  		ResultSet rs = null;
  		
  		String sql = "select * from student";
  		
  		try {
  			//创建上下文环境
  			Context initContext = new InitialContext();
  			//查找数据源
  			Context envContext = (Context)initContext.lookup("java:/comp/env");
  			DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
  			//从连接池中获取连接
  			conn = ds.getConnection();
  			pstm = conn.prepareStatement(sql);
			rs = pstm.executeQuery();
			
			if(rs.next()) {
				out.println(rs.getString(1));
				out.println(rs.getString(2));
				out.println(rs.getString(3));
				out.println(rs.getString(4));
				out.println(rs.getString(5));  
			} else {
				out.println("no rs.next()");
			}			 
  		} catch(Exception ex) {
  			ex.printStackTrace();
  		} finally {
  			try {rs.close();} catch(Exception e){}
  			try {pstm.close();} catch(Exception e){}
  			try {conn.close();} catch(Exception e){}
  		}
  	 %>
  </body>
</html>


注:由连接池获取到的连接使用上述方式获取的连接,只能在jsp页面或者servlet页面中使用,在java代码的main方法中测试连接时会报以下异常


javax.naming.NoInitialContextException


以上。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值