首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JSP 空指針異常修復:executeQuery 返回 null 導致 rs.next() 崩潰

     編輯:程式設計疑難解答

錯誤堆疊:java.lang.NullPointerException at org.apache.jsp.index_jsp._jspService(index_jsp.java:114),第 114 行對應 while(rs.next())。

根因

JDBConnection.executeQuery 方法:

public ResultSet executeQuery(String sql) {
    ResultSet rs = null;
    try {
        // ...
        rs = stmt.executeQuery(sql);
        return null; // 錯誤:應返回 rs
    } catch (SQLException e) { }
    return rs;
}

成功執行查詢後返回了 null,導致 JSP 中 rs 為 null,調用 next() 拋 NPE。

修正

public ResultSet executeQuery(String sql) {
    try {
        if (con == null) creatConnection();
        Statement stmt = con.createStatement();
        return stmt.executeQuery(sql); // 直接返回
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}

JSP 健壯寫法


<%
ResultSet rs = connection.executeQuery(sql);
if (rs != null) {
    try {
        while (rs.next()) { ... }
    } finally {
        try { rs.close(); } catch (SQLException ignore) {}
    }
}
connection.closeConnection();
%>

其他隱患

  • creatConnection 失敗仍返回 true,應拋異常或返回 false。
  • closeConnection 判斷 if (con == null) 邏輯反了,應 if (con != null)。
  • JDBC 資源(Connection、Statement、ResultSet)必須在 finally 中關閉,建議使用 Try-with-resources (Java 7+)。

修復返回值邏輯並加強資源管理,消除 NPE 與連接洩漏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved