在網路上關於 JSP 連接 DB2 資料庫的資料雖多,但許多範例存在錯誤,導致無法成功建立連線。本文整理實測可行的完整程式碼,並針對關鍵設定(如驅動程式註冊、連線字串格式、資源釋放)進行詳細說明,供開發者參考。
<%@ page session="false" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<html>
<head><title>DB2 連線測試</title></head>
<body>
<%
// 1. 設定連線參數
String url = "jdbc:db2:ch"; // 格式:jdbc:db2:資料庫別名
String user = "db2inst1"; // 實例擁有者帳號
String passWord = "db2inst1"; // 密碼
// 2. 關鍵步驟:顯式註冊 DB2 Type 2 驅動
// 不同於 Oracle 等資料庫常用 Class.forName(),DB2 建議直接實例化驅動並註冊
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
Connection conn = null;
try {
// 3. 取得連線
conn = DriverManager.getConnection(url, user, passWord);
Statement stmt = conn.createStatement();
// 4. 執行查詢
String sql = "SELECT * FROM TASK";
ResultSet rs = stmt.executeQuery(sql);
%>
<table border="1" cellspacing="1" cellpadding="3">
<tr>
<th>欄位 1</th><th>欄位 2</th><th>欄位 3</th>
<th>欄位 4</th><th>欄位 5</th><th>欄位 6</th>
</tr>
<%
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>
<%
}
// 5. 關閉 ResultSet 與 Statement
rs.close();
stmt.close();
} finally {
// 6. 確保連線一定被關閉
if (conn != null) {
try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
%>
</table>
</body>
</html>
jdbc:db2:ch 中的 ch 是在 DB2 客戶端目錄中編目的資料庫別名,而非實體資料庫名稱。請確認已透過 db2 catalog database 指令正確設定。
DB2 Type 2 驅動(本地連線)必須使用 DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver()) 顯式註冊。若改用 Class.forName() 可能導致 No Suitable Driver 錯誤。
try-finally 區塊保證連線關閉。ResultSet、Statement、Connection。null 協助 GC 回收(選擇性)。db2jdbc.dll(Windows)或 libdb2jdbc.so(UNIX)存在於 java.library.path 或 LIBPATH 中。db2start)、監聽埠是否正確(預設 50000)、防火牆設定。CODESET IBM-eucCN TERRITORY CN,且 JVM 環境編碼一致。PreparedStatement 防止 SQL 注入並提升效能。com.ibm.db2.jcc.DB2Driver),URL 格式為 jdbc:db2://host:port/dbname。掌握 DB2 JDBC Type 2 驅動的正確註冊方式與資源釋放流程,即可在 JSP/Servlet 中穩定存取 DB2 資料庫。本範例已在 AIX + DB2 7.2 + Tomcat 4.1 環境實測通過,可直接套用至專案中。