'ResultSet'에 해당되는 글 2건

  1. 2007.11.23 [Tip] ResultSet 을 파일로 저장하기
  2. 2007.09.19 [jdbc] ResultSet 크기 구하기 1
ResultSet 은 Serializable 을 지원하지 않는다. 따라서, 파일로 쓰려면
Serializable 이 지원되는 RowSet 으로 변환해서 사용해야한다.
jdk api 에는 없지만 rt.jar 에 있는 com.sun.rowset.CachedRowSetImpl 을 이용하여
변환할수 있다. RowSet 은 ResultSet 의 기능을 모두 사용할수 있다.


...
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
...
 public void writeResultSet(ResultSet rs){
  try {
   File file = new File("d:/dev/temp/rs_tmp_22000.rs");
   
   FileOutputStream fout = new FileOutputStream(file);
      ObjectOutputStream oout = new ObjectOutputStream(fout);
      CachedRowSet crs = new CachedRowSetImpl();
      crs.populate(rs);
      oout.writeObject(crs);
      oout.close();

  } catch (IOException e) {
     e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }  
 }
...


...
public static RowSet readRs(File file){
  Object obj = null;
  try {  
   
   FileInputStream in = new FileInputStream(file);
   ObjectInputStream oin = new ObjectInputStream(in);
   obj = oin.readObject();
      oin.close();      
   
  } catch (IOException e) {
     e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return (RowSet)rs;  
 }
...

"자바 프로그램에서 데이터베이스 접근은 매우 무거운 작업(heavyweight operation)이기 때문에, 메모리에 데이터를 캐싱하는 것은 어플리케이션 성능을 위한 핵심 요소가 된다. 메모리에 캐시되어 있는 데이터의 행을 위한 컨테이너로 ResultSet을 사용하길 원하는 경우, javax.sql.RowSet의 하위 인터페이스인 javax.sql.rowset.CachedRowSet을 사용할 수 있다. 이 인터페이스의 인스턴스는 데이터소스에 항상 연결되지 않고도 작업을 수행할 수 있는 능력을 제공한다. 이 기능에 더해서, 이 인터페이스는 scrollable, updatable, serializable의 기능을 지원한다. 이 기능에 더해서, spreadsheet와 같은 표 형태의 포맷으로 다른 데이터소스와도 작업할 수 있다. "
- http://network.hanb.co.kr/view.php?bi_id=1367

Posted by ukmie
,
ResultSet 클래스에는 row의 갯수를 리턴해주는 메소드가 없다.
물론 만들면 된다.
resultSet.last() 를 호출하므로
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY
을 미리 설정해줘야 한다. (필요없는 경우도 있긴하다.)
PreparedStatement stmt = conn.prepareStatement(
query,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
or
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

public static int getResultSetSize(ResultSet resultSet) {
    int size = -1;

    try {
        resultSet.last();
        size = resultSet.getRow();
        resultSet.beforeFirst();
    } catch(SQLException e) {
        return size;
    }

    return size;
}

Posted by ukmie
,