以MSSQL SERVER 2000为例子,查了下网上的资料,很多种说法,因此归纳了下,完全通过测试。
我用的是TOMCAT 5.0.28,搭配MSSQL SERVER 2000
1、修改TOMCAT 下conf目录下的server.xml,在<HOST></HOST>之间加入
<Context path="/TESTLOG" docBase="C:/Tomcat5.0/webapps/TESTLOG" debug="0" crosscontext="true" reloadable="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>naughtname</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ONLINE;SelectMethod=Direct</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>5</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
</ResourceParams>
</Context>
部分解释如下:
testmysql是为了测试而放在weapps下的一个目录服务。
jdbc/TestDB:调用的连接句柄名称
maxActive="100":最大活跃连接数,这里取值为100,表示同时最多有100个数据库连接。设为0表示无限制。-->
maxIdle="30":最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。
maxWait="10000":最大建立连接等待时间。如果超过此时间将接到异常。这里设置为10000,表示10秒后超时。设为-1表示无限制,直到超时为止。
com.microsoft.jdbc.sqlserver.SQLServerDriver:数据库连接字符串
username:数据库连接的用户名
passward:数据库连接的密码
注意:如果最大数据库活跃连接数过大,可想而知,内存占用量是非常惊人的!如果空闲连接数过大,则资源利用率低,连接池长期未释放,可导致连接池结点异常。所以选好maxActive和maxIdle是连接池性能的关键因素,当然这取决于服务器环境。
2、然后再在web.xml下如下配置
<resource-ref>
<res-ref-name>TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
注意,这里的TestDB(名称)要和你在server.xml里设置的<ResourceParams name="jdbc/TestDB">
名称一样。
3、测试程序如下:
<%
try{
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM testmysql");
out.println("User-list"+"<br>");
while(rs.next()){
out.print(rs. getString(1)+" "); //此处注意读数据表时的表字段类型
out.print(rs.getString(2)+"<br>");
}
rs.close();
stmt.close();
conn.close();}
catch(Exception e){
out.print(e);
}
%>