一.server.xml配置数据源:
<Context >
<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</value> <!-- 如果设为0,则为无穷大 -->
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value> <!-- 10秒 如果为-1则不限时长 -->
</parameter>
<parameter>
<name>username</name>
<value>dbuser</value>
</parameter>
<parameter>
<name>password</name>
<value>1234</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
<parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>
<parameter>
</ResourceParams>
</Context>
参数说明:
1.Resource
1)name指定Resource的JDNI名字
2)auth指定Resource的管理者(Manager).有二个可选值Container和Application
Container表示由容器来创建和管理Resource
Application表示由Web应用来创建和管理Resource
3)type指定Resource所属的Java类名
2.ResourceParam
1)factory指定生成DataSource的factory的类名
2)maxActive指定数据库连接池中处于活动状态的数据库连接的最大数目
3)maxIdle指定数据库连接池中处于空闲状态的数据库连接的最大数目
4)maxWait指定数据库连接池中的数据库连接处于空闲状态的最长时间.
单位为毫秒,超过这一时间将会抛出异常.取值为-1,表示可无限期地等待
5)username指定连接数据库的用户名
6)password指定连接数据库的口令
7)driverClassName指定连接数据库的JDBC驱动程序
8)url指定连接数据库的URL
二.web.xml声明对JDNI Resource的引用
<web-app>
<resource-ref>
<description>DB connection</description>
<res-ref-name>jdbc/BookDB</res-ref-name>
<rse-type>javax.sql.DataSource</rs-type>
<res-auth>Container</res-auth>
<resource-ref>
</web-app>
参数说明:
description:
res-ref-name:指定引用资源的JDNI史字,与<Resource>中的name属性对应
res-type指定引用资源的类名字.与<Resource>中的type属性对应
res-auth指定引用资源的管理者.与<Resource>中的auth对应
三.访问数据源
1)查找数据源,产生java.sql.DataSoruce引用
javax.nameing.Context提供查找 JDNI Resource的接口
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
2)取得连接
Connection con=ds.getConnection();
3)关闭连接
con.close();
close()方法,把Connection返回到数据库连接池中,使Connection恢复空头状态
四.jsp应用范例
(略)
五.比较JDBC
1).导入包
A:
import java.sql.*;
B:
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
2)寻找加载驱动程序
A:
public BookDB() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
}
B:
public BookDB() throws Exception{
Context ctx=new Context();
if(ctx==null)
throw new Exception("No Context");
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
}
3)取得连接
A:
public Connection getConnection() throws Exception{
return java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
}
B:
public Connection getConnection() throws Exception{
return ds.getConnection();
}
4)关闭连接(作用不一样)
public void closeConnection(Connection con){
try{
if(con!=null)
con.close();
}catch(Exception e){
e.printStackTrace();
}
}