網絡上關於JSP連DB2的資料良莠不齊,許多示例忽略關鍵驅動註冊步驟導致連接失敗。本文基於AIX 4.3 + DB2 7.2 + JDK 1.3 + Tomcat 4.1.6實測環境,提供經驗證可用的完整連接方案。
Oracle/DB2等企業級數據庫不建議使用Class.forName()單純加載驅動類,而應顯式創建驅動實例並註冊到DriverManager:
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
// 而非 Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
這確保驅動正確初始化並註冊,避免「No suitable driver」錯誤。
<%@ page session="false" %>
<%@ page import="java.sql.*, java.util.*" %>
<html><head></head><body>
<%
String url = "jdbc:db2:ch"; // jdbc:子協議:數據庫別名
String user = "db2inst1";
String password = "db2inst1";
// 關鍵:顯式註冊驅動實例
DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
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>
db2java.zip(或db2jcc.jar新版驅動)需在WEB-INF/lib或容器共享類加載路徑。jdbc:db2:<數據庫別名>,別名需在DB2客戶端目錄中編目。finally塊確保連接關閉,防洩漏。com.ibm.db2.jcc.DB2Driver(JCC通用驅動),支持JDBC 4.0+自動註冊(META-INF/services/java.sql.Driver),無需顯式註冊代碼。dataSource在context.xml或Spring中管理。「顯式驅動註冊」是連接DB2/Informix等老牌數據庫的黃金法則,切記切記。