首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

JSP 連接 DB2 數據庫實戰:驅動註冊、連接池與常見錯誤排查

     編輯:DB2 教學

JSP 連接 DB2 的核心難點

眾多開發者在 JSP 中連接 DB2 時遭遇 ClassNotFoundException、No suitable driver 或中文亂碼等問題。網上流傳的代碼多使用 Class.forName() 隱式加載驅動,實際上 DB2 類似 Oracle,顯式創建驅動實例並註冊到 DriverManager 才是穩健之道。本文基於 AIX 4.3 + DB2 7.2 + JDK 1.3 + Tomcat 4.1.6 實測環境,提供經過驗證的完整範例與避坑指南。

關鍵代碼解析

<%@ 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());

    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>

五大避坑要點

  1. 驅動註冊方式:必須用 DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver()),Class.forName("COM.ibm.db2.jdbc.app.DB2Driver") 在某些 Web 容器類加載器下會失效。
  2. URL 格式:jdbc:db2:<數據庫別名>,別名需在 DB2 客戶端配置(db2 catalog database)一致。
  3. 資源關閉順序:ResultSet → Statement → Connection,且置 null 防止連接泄漏。
  4. 異常處理:生產環境需捕獲 SQLException 並記錄 SQLState、ErrorCode,便於排查鎖超時(-911)、死鎖(-913)等錯誤。
  5. 編碼設置:DB2 數據庫碼頁與 JVM file.encoding 需一致,建議在連接屬性指定 charSet=UTF-8。

進階優化建議

  • 生產環境請使用 javax.sql.DataSource + 連接池(如 DBCP、HikariCP),配置 validationQuery="SELECT 1 FROM SYSIBM.SYSDUMMY1"。
  • 頻繁查詢的只讀操作可啟用 DB2BaseDataSource.setReadOnly(true) 降低鎖開銷。
  • 大結果集場景使用 stmt.setFetchSize(1000) 減少網絡往返。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved