2013-11-03 2 views
0

내 코드에서 전달하는 javax.sql.rowset.CachedRowSet 개체를 사용하고 있습니다. 그것이 CachedRowSet 내 코드의 나머지 부분에 전달되기 직전에 폐쇄 채워 된에서 ResultSet (읽기 전용, 나는 업데이트하거나 개조하지 않음) :CachedRowSet :: release() vs close()

위의 설정을 감안할 때
public CachedRowSet getData(String query) throws SQLException { 
    RowSetFactory aFactory = RowSetProvider.newFactory(); 
    CachedRowSet crs = aFactory.createCachedRowSet(); 
    Statement stmt = null; 
    ResultSet rs = null; 
    try { 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery(query); 
     crs.populate(rs); 
    } finally { 
     DbUtils.closeQuietly(null, stmt, rs); 
    } 
    return crs; 
} 

, 그것이 완료되면 close() 또는 release()CachedRowSet 개체에도 의미가 있습니까? This answerclose()이 상처를주지는 않지만 release() 또는 그 차이점을 언급하지 않는다고 제안하는 것으로 보입니다. 나는 release() 다음에 close()을 쓸 수 있다고 생각합니다.하지만 조금 더 이해하고 싶습니다. 심지어 CachedRowSet 개체를 serialize하고 다른 모듈의 String에서 내재화하여 어떤 의미로도 내부화되지 않은 인스턴스에서 close()release()을 호출 할 수 있습니다.

답변

1

나는 당신의 질문을 완전히 이해한다고 생각하지 않는다. 그러나 ..

realese() ->이 CachedRowSet 객체의 현재 내용을 해제하고 등록 된 모든 리스너에 rowSetChanged 이벤트를 보냅니다. 해결되지 않은 업데이트는 무시되고이 메서드를 호출하면 행 집합에 행이 없습니다. 원본으로 사용하는 데이터 원본과의 상호 작용은 없으며 모든 행 집합 콘텐츠, 메타 데이터 및 콘텐츠 업데이트는 복구 할 수 없어야합니다. 링크 :(http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html)

close()를 -> 그것은 결과 집합에서 자료이 ResultSet 객체의 데이타베이스와 JDBC 자원 것이 아니라, 즉시 자동으로 닫힐 때 이런 일이 기다리고 상속.

ResultSet 객체를 닫아도 ResultSet에 의해 생성 된 Blob, Clob 또는 NClob 객체가 닫히지 않습니다. Blob, Clob 또는 NClob 객체는 사용 가능한 메서드가 호출되지 않는 한 Creation 된 트랜잭션의 기간 동안 유효합니다.

ResultSet이 닫히면 getMetaData 메소드를 호출하여 작성된 ResultSetMetaData 인스턴스에 계속 액세스 할 수 있습니다.

참고 : CachedRowSet은 연결을 유지하지 않습니다. 쿼리 나 업데이트를 수행하는 동안 연결이 필요합니다.

희망 도움 :

관련 문제