쿼리를 수행하고 결과를 ResultSet에 담을 수 있지만, connection 과 statement가 close되면 resultSet의 결과도 사라지게 됩니다.
따라서 일반적으로 resultSet을 리턴값으로 사용하기 힘든데요.
아래와 같이 resultSet을 cachedRowSet에 populate하게 되면, 응답 결과를 보존하면서 리턴값으로 사용할 수 있습니다.
/**
* 쿼리를 실행하여 수행결과를 CachedRowSet에 담아서 리턴
* @param query 수행할 쿼리
* @return 정상이면 CachedRowSet, 실패하면 null
*/
public static CachedRowSet excuteQuery(String query) {
// DB 연결
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
DbcpBasicDataSource db = DbcpBasicDataSource.getInstance();
CachedRowSet crs = null;
try
{
// 쿼리
conn = db.getConnection();
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
crs = new CachedRowSetImpl();
crs.populate(rs);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println(query);
crs = null;
}
finally {
try { db.freeConnection(conn, pstmt, rs); }
catch (Exception ex) { System.out.println(ex.getMessage()); }
}
return crs;
}




