数据源的配置涉及修改Server.xml和Web.xml文件,在Server.xml中加入定义数据源的元素<Resource>,在Web.xml中加入<resource-ref>元素,声明该Web应用所引用的数据源。
1.在Server.xml中加入<Resource>元素
<Resource>元素用来定义JNDI Resource。在Tomcat中,DataSource是JNDI Resource的一种。以下代码定义了一个名为jdbc/BookDB的数据源。
<Context path="/etech" docBase="etech" debug="0" reloadable="true">
<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/BookDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</name>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>ynitdkj</value>
</parameter>
<parameter>
<name>dirverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
2.在Web.xml中加入<resource-ref>元素
如果Web应用访问了由Servlet容器管理的某个JNDI Resource,必须在Web.xml文件中声明对这个JNDI Resource的引用。表示资源引用的元素为<resource-ref>,以下是声明引用jdbc/BookDB数据源的代码:
<wepapp>
<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-type>
</resource-ref>
</webapp>
3.在程序中访问数据源
javax.naming.Context提供了查找JNDI Resource的接口,例如:可以通过以下代码获得jdbc/BookDB数据源的引用:
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
得到了DataSrouce对象的引用后,就可以通过DataSource的getConnection()方法获得数据库连接对象Connection:
Connection con=ds.getConnection();
当程序结束数据库访问后,应该调用Connection的close()方法,及时将Connection返回数据库连接池,使Connection恢复空闲状态。
例:DbJsp.jsp
<!--首先导入一些必要的packages-->
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<!--设置中文输出-->
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<head>
<title>DbJsp.jsp</title>
</head>
<body>
<%
//以try开始
try{
Connection con;
Statement stmt;
ResultSet rs;
//建立数据库连接
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
con=ds.getConnection();
//创建一个JDBC声明
stmt=con.createStatement();
//增加新记录
stmt.executeUpdate("Insert INTO books(id,name,title,price) VALUES ('999','Tom','Tomcat bible','44.5')");
//查询记录
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>");
//删除新增的记录
stmt.executeUpdat("Delete FROM books Where id="999");
//关闭数据库连接
rs.close();
stmt.close();
con.close();
}
catch(Exception e){
out.println(e.getMessage());
}
%>
</body>
</html>
4.执行
将MySql的JDBC驱动程序拷贝到<CATALINA_HOME>/common/lib目录下,通过浏览器访问:
http://localhost:8080/demo/DbJsp.jsp
1.在Server.xml中加入<Resource>元素
<Resource>元素用来定义JNDI Resource。在Tomcat中,DataSource是JNDI Resource的一种。以下代码定义了一个名为jdbc/BookDB的数据源。
<Context path="/etech" docBase="etech" debug="0" reloadable="true">
<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/BookDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</name>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>ynitdkj</value>
</parameter>
<parameter>
<name>dirverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
2.在Web.xml中加入<resource-ref>元素
如果Web应用访问了由Servlet容器管理的某个JNDI Resource,必须在Web.xml文件中声明对这个JNDI Resource的引用。表示资源引用的元素为<resource-ref>,以下是声明引用jdbc/BookDB数据源的代码:
<wepapp>
<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-type>
</resource-ref>
</webapp>
3.在程序中访问数据源
javax.naming.Context提供了查找JNDI Resource的接口,例如:可以通过以下代码获得jdbc/BookDB数据源的引用:
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
得到了DataSrouce对象的引用后,就可以通过DataSource的getConnection()方法获得数据库连接对象Connection:
Connection con=ds.getConnection();
当程序结束数据库访问后,应该调用Connection的close()方法,及时将Connection返回数据库连接池,使Connection恢复空闲状态。
例:DbJsp.jsp
<!--首先导入一些必要的packages-->
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<!--设置中文输出-->
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<head>
<title>DbJsp.jsp</title>
</head>
<body>
<%
//以try开始
try{
Connection con;
Statement stmt;
ResultSet rs;
//建立数据库连接
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
con=ds.getConnection();
//创建一个JDBC声明
stmt=con.createStatement();
//增加新记录
stmt.executeUpdate("Insert INTO books(id,name,title,price) VALUES ('999','Tom','Tomcat bible','44.5')");
//查询记录
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>");
//删除新增的记录
stmt.executeUpdat("Delete FROM books Where id="999");
//关闭数据库连接
rs.close();
stmt.close();
con.close();
}
catch(Exception e){
out.println(e.getMessage());
}
%>
</body>
</html>
4.执行
将MySql的JDBC驱动程序拷贝到<CATALINA_HOME>/common/lib目录下,通过浏览器访问:
http://localhost:8080/demo/DbJsp.jsp