ojdbc14.jar (JDK 1.4/1.5) 或 ojdbc5.jar (JDK 1.5+)# 從 $ORACLE_HOME/jdbc/lib 複製
cp $ORACLE_HOME/jdbc/lib/ojdbc14.jar $CATALINA_HOME/lib/
編輯 $CATALINA_HOME/conf/server.xml,在 `
<Context path="/test" docBase="D:/Tools/Project/test/WebRoot" reloadable="true">
<Resource name="jdbc/chong800"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="10"
maxWait="10000"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:chong800"
/>
</Context>
屬性說明:
maxActive:連線池最大連線數。maxIdle:閒置保留連線數。maxWait:取得連線最長等待毫秒數。url:Thin 模式連線字串,格式 jdbc:oracle:thin:@host:port:sid。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<!DOCTYPE html>
<html>
<head><title>資料源連線測試</title></head>
<body>
<%
Connection conn = null;
try {
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/chong800");
conn = ds.getConnection();
out.println("✅ 連線成功!Connection 物件: " + conn);
out.println("<br>資料庫元資料: " + conn.getMetaData().getDatabaseProductName() + " " + conn.getMetaData().getDatabaseProductVersion());
} catch (Exception e) {
out.println("❌ 連線失敗: " + e.getMessage());
e.printStackTrace(new java.io.PrintWriter(out));
} finally {
if (conn != null) try { conn.close(); } catch {}
}
%>
</body>
</html>
| 現象 | 原因 | 解決 |
|---|---|---|
| ClassNotFoundException: oracle.jdbc.driver.OracleDriver | 驅動 jar 未放入 $CATALINA_HOME/lib | 確認 ojdbc*.jar 位置,重啟 Tomcat |
| NameNotFoundException: jdbc/chong800 | JNDI 名稱不符或 Context 路徑錯誤 | 檢查 server.xml Resource name 與 lookup 字串完全一致 |
| ORA-12505 / ORA-12514 | SID/Service Name 錯誤或 Listener 未註冊 | 用 `lsnrctl status` 確認服務名,url 改用 Service Name: //host:port/service_name |
| 連線洩漏導致 maxActive 耗盡 | 程式未在 finally 關閉連線 | 務必使用 try-with-resources (JDK 7+) 或 finally 區塊 close() |
validationQuery="SELECT 1 FROM DUAL"、testOnBorrow="true" 防止防火牆斷開閒置連線。oracle.jdbc.OracleDriver(無 .driver 套件)。numActive, numIdle 指標。Tomcat 內建 DBCP 連線池配合 Oracle Thin Driver,設定簡單且效能足夠中小型應用。關鍵在於驅動版本與 JDK 相容、JNDI 名稱一致性、連線字串正確性。建立標準化 `server.xml` 範本與測試 JSP,可大幅減少部署環節錯誤。