一、开发工具
1.tomcat版本:tomcat5.5.27
2.mysql版本:mysql 5.1
3.数据库驱动程序:mysql-connector-java-5.1.9
4.eclipse版本:eclipse 3.4.1
5.JDK版本:JDK 1.6
二、准备工作
1.在Eclipse里创建Dynamic Web Project,名称为test。在WebContent\META-INF下创建context.xml文件。应用目录如下图所示:
2.把数据库驱动程序mysql-connector-java-5.1.9拷贝到WEB-INF\lib和tomcat-5.5.27\common\lib目录下。
三、配置数据源
1.配置context.xml文件
context.xml文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="cwx2009" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/BookDB?autoReconnect=true">
</Resource>
</Context>
<Resource属性说明>
1)name:指定Resource的JNDI名字。
2)auth:指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示由容器来创建和管理Resource,Application表示由web应用来创建和管理Resource。
3)type: 指定Resource的Java类名。
4)username:指定连接数据库的用户名。
5)password:指定连接数据库的口令。
6)driverClassName:指定连接数据库的JDBC驱动器中的Driver实现类的名字。
7)url:指定连接数据库的URL,127.0.0.1是要连接的数据库服务器的ip,3306是数据库服务器端口,BookDB是数据库名称。
8)maxActive:指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不受限制。
9)maxIdle:指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0,表示不受限制。
10)maxWait:指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超过这一时间,将会抛出异常。取值为-1,表示可以无限期等待。
2.配置web.xml文件
如果web应用访问了有Servlet容器管理的某个JNDI资源,那么必须在web.xml文件中声明对这个JNDI资源的引用。表示资源引用的元素为<resource-ref>,以下是声明引用jdbc/BookDB数据源的代码:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/BookDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>属性说明:
1)description:对所引用的资源的说明。
2)res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。
3)res-type:指定所引用资源的类名,与<Resource>元素中的type属性对应。
4)res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。
3.配置server.xml文件
在tomcat-5.5.27\conf下找到server.xml文件,在<GlobalNamingResources></GlobalNamingResources>之间加入如下内容:
<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="cwx2009" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/BookDB?autoReconnect=true" />
在<Host></Host>之间加入如下内容:
<Context docBase="D:\develop\java\eclipse\workspace\test\WebContent" path="/test" reloadable="true" source="org.eclipse.jst.j2ee.server:test">
<ResourceLink global="jdbc/BookDB" name="jdbc/BookDB" type="javax.sql.DataSource"/>
</Context>
<Context>属性说明:
1)docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径。如果Web应用采用开放目录结构,则指定Web应用的根目录;如果Web应用是个WAR文件,则指定WAR文件的路径。
2)path:指定访问该Web应用的URL入口。
3)reloadable:如果这个属性为true,Tomcat服务器会在运行状态下监视classes下文件的改动和WEB-INF/web.xml文件的改动,监测到文件被改动,服务器会自动重新加载Web应用。
4)source:
<ResourceLink>属性说明:
1)global:被连接的连接全局资源的名称。
2)name:创建的资源连接的名称,相对于java:comp/env context。
3)type:当web应用在该资源连接上进行查找时,返回的Java类名的全称。
四、通过数据源连接数据库的JSP范例程序
创建JSP范例:tdsaccess.jsp
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %><html>
<head><title>使用tomcat自带的数据库连接池</title>
</head>
<body>
<%
try{
Connection conn;
Statement stmt;
ResultSet rs;
//从数据源中获得数据库连接
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
conn = ds.getConnection();
//创建一个SQL声明
stmt = conn.createStatement();
//查询记录
rs = stmt.executeQuery("select ID,NAME,TITLE,PRICE from BOOKS");
//输出查询结果
out.println("<table border=1 width=400>");
while (rs.next()){
String col1 = rs.getString(1);
String col2 = rs.getString(2);
String col3 = rs.getString(3);
float col4 = rs.getFloat(4);
//转换字符编码
//col1 = new String(col1.getBytes("ISO-8859-1"),"GB2312");
//col2 = new String(col2.getBytes("ISO-8859-1"),"GB2312");
//col3 = new String(col3.getBytes("ISO-8859-1"),"GB2312");
//打印显示的数据
out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
}
out.println("</table>");
//关闭结果集、SQL声明和数据库连接
rs.close();
stmt.close();
conn.close();
}catch(Exception e){
out.println(e.getMessage());
e.printStackTrace();
}
%>
</body>
</html>
在浏览器中输入http://localhost:8080/test/tdsaccess.jsp,即可查看结果。
四、问题
在查看结果时,可能遇到以下问题:
1.Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)
.....
.....
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Could not create connection to database server. Attempted reconnect 3 times. Gi
ving up.
原因:
在编写mysql的URL时,写错了IP、端口号或数据名称,将导致这个错误;若MYSQL的服务没有启动,在查看结果时,也将导致这个错误。