核心連線程式碼
<%@ page session="false" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<html><head></head><body>
<%
String url = "jdbc:db2:ch"; // jdbc:子協定:資料庫別名
String user = "db2inst1";
String passWord = "db2inst1";
// 關鍵:顯式註冊 DB2 Type 2 驅動程式
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
// Oracle 同理需顯式建立驅動實例;其他資料庫常用 Class.forName()
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, passWord);
Statement stmt = conn.createStatement();
String sql = "select * from task";
ResultSet rs = stmt.executeQuery(sql);
%>
<table border="1" cellspacing="1" cellpadding="0">
<%
while (rs.next()) {
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
<td><%=rs.getString(5)%></td>
<td><%=rs.getString(6)%></td>
</tr>
<%
}
rs.close(); rs = null;
stmt.close(); stmt = null;
} finally {
if (conn != null) { conn.close(); }
}
%>
</table></body></html>
關鍵點解析
- 驅動程式註冊:DB2 Type 2 驅動 (
COM.ibm.db2.jdbc.app.DB2Driver) 必須顯式 new 並 registerDriver,不可用 Class.forName。這與 Oracle Type 2 驅動類似。
- 連線 URL 格式:
jdbc:db2:<資料庫別名>,別名需在 DB2 客戶端目錄中編目。
- 資源釋放:
finally 區塊確保 Connection/Statement/ResultSet 依序關閉,防止洩漏。
- 部署環境驗證:範例於 AIX 4.3 + DB2 7.2 + JDK 1.3 + Tomcat 4.1.6** 通過測試。
常見問題排查
ClassNotFoundException:確認 db2java.zip (或 db2jcc.jar) 在 CLASSPATH/Web-INF/lib。
- 連線失敗:檢查 DB2 實例是否啟動、資料庫別名是否編目、防火牆/權限設定。
- 中文亂碼:確認 JSP
pageEncoding、資料庫代碼頁、JDBC 驅動版本相容性。
進階建議
- 生產環境請使用 連線池 (Tomcat DBCP、HikariCP、WebSphere DataSource) 而非逐請求建立連線。
- 採用
PreparedStatement 防止 SQL 注入並利用語句快取。
- Type 4 通用驅動 (
com.ibm.db2.jcc.DB2Driver) 免客戶端安裝,跨平台部署更彈性。