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

Java NullPointerException 修正:Connection 為 null 時需檢查再建立 Statement

     編輯:程式設計綜合問答

錯誤堆疊

java.lang.NullPointerException
  at com.wgh.tools.ConnDB.executeQuery(ConnDB.java:56)
  at com.wgh.dao.DiaryDao.queryDiary(DiaryDao.java:28)
  at com.wgh.servlet.DiaryServlet.listAllDiary(DiaryServlet.java:249)

第 56 行:stmt = conn.createStatement(...) 拋出 NPE,代表 conn 為 null。

根本原因

getConnection() 方法在取得連線失敗(驅動未載入、URL 錯誤、認證失敗、資料庫服務未啟動)時回傳 null 或拋出異常被 catch 吞掉,導致後續使用 null 連線。

修正程式碼

public ResultSet executeQuery(String sql) {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        conn = getConnection();
        if (conn == null) {
            throw new SQLException("Failed to obtain database connection");
        }
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                    ResultSet.CONCUR_READ_ONLY);
        rs = stmt.executeQuery(sql);
    } catch (SQLException ex) {
        // 記錄完整堆疊,勿只印訊息
        ex.printStackTrace();
        // 可選:拋出自訂異常讓上層處理
        throw new RuntimeException("DB query failed", ex);
    }
    return rs; // 呼叫端需在 finally 關閉 rs、stmt、conn
}

最佳實踐

  • 使用連線池(HikariCP、Druid)替代自行管理連線。
  • 採用 try-with-resources 自動關閉資源(JDBC 4.1+)。
  • 異常處理:記錄日誌 + 向上拋出,避免吞掉異常導致難以排查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved