封裝 SQL_ExecuteQuery 回傳 ResultSet 時,Connection、PreparedStatement 若在方法內關閉,ResultSet 會立即失效;若不關閉,呼叫端又難以取得這些資源進行關閉。
public List
DAO 方法不關閉連線,由 Filter/Interceptor 在請求結束時統一歸還。
public class CloseableResultSet implements AutoCloseable {
private final ResultSet rs;
private final Statement st;
private final Connection con;
// 委派 next(), getXxx()...
@Override public void close() { /* 依序關閉 rs, st, con */ }
}
**方案 1 最簡單、最安全**,適用於中小型專案。大型系統建議引入 Spring JDBC Template 或 MyBatis,由框架統一管理資源生命週期。