Tomcat 4.1.31 + JDK 1.4.2 + SQL Server 2000 + Win2000 AS
在 <Context path="/blog" docBase="blog" ...> 內添加:
<Resource name="jdbc/blog" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/blog">
<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</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=blog</value></parameter>
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>sa</value></parameter>
<parameter><name>maxActive</name><value>20</value></parameter>
<parameter><name>maxIdle</name><value>20</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>
參數說明:factory 指定 DBCP 工廠;driverClassName 視資料庫而定(MySQL: org.gjt.mm.mysql.Driver,Oracle: oracle.jdbc.driver.OracleDriver);maxActive 最大活躍連接,maxIdle 最大空閒連接,maxWait=-1 無限等待。
<resource-ref>
<description>SqlServer Datasource example</description>
<res-ref-name>jdbc/blog</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
將廠商驅動 JAR(SQL Server 三個 jar、MySQL mm.mysql-2.0.14.jar、Oracle classes12.jar)複製到 $CATALINA_HOME/common/lib。
<%@ page import="java.sql.*, javax.naming.*" %>
<%
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/blog");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into test(id,name) values('00001','fany')");
ResultSet rs = stmt.executeQuery("select id,name from test");
if (rs.next()) { out.println(rs.getString(1) + " " + rs.getString(2)); }
%>
訪問 https://localhost:8080/blog/testdb.jsp 應輸出 00001 fany。
name、web.xml res-ref-name、代碼 lookup 三者一致。maxActive、檢查代碼是否 close() 連接。