JavaTM Platform
Standard Ed. 6

javax.sql.rowset
인터페이스 CachedRowSet

모든 슈퍼 인터페이스:
Joinable , ResultSet , RowSet , Wrapper
기존의 서브 인터페이스의 일람:
FilteredRowSet , JoinRowSet , WebRowSet


public interface CachedRowSet
extends RowSet , Joinable

CachedRowSet 의 모든 표준 구현이 구현해야 하는 인터페이스입니다.  

Sun Microsystems 로부터 제공된 CachedRowSet 인터페이스의 레퍼런스 구현은, 표준 구현입니다. 개발자는 이것을 그대로 사용하는 일도, 확장하는 일도, 또는 이 인터페이스의 구현을 독자적으로 작성할 수도 있습니다.  

CachedRowSet 객체는, 메모리내에 행을 캐쉬하는, 데이터행의 컨테이너이며, 항상 그 데이터 소스에 접속하고 있지 않아도 처리를 실행할 수 있습니다. 또, 스크롤, 갱신, 직렬화가 가능한 JavaBeansTM 컴퍼넌트입니다. CachedRowSet 객체에는, 일반적으로, 결과 세트의 행이 포함됩니다만, 스프레드쉬트 등, 겉(표) 형식의 모든 파일의 행을 포함할 수도 있습니다. 레퍼런스 구현은,ResultSet 객체로부터의 데이터의 취득 밖에 지원합니다만, 개발자는, 그 외의 겉(표) 형식의 데이터 소스에 액세스 할 수 있도록(듯이),SyncProvider 구현을 확장할 수가 있습니다.  

어플리케이션은,CachedRowSet 객체내의 데이터를 변경할 수 있습니다. 이러한 변경은, 데이터 소스에도 반영됩니다.  

CachedRowSet 객체는 「미접속의」행 세트입니다. 즉, 데이터 소스와의 접속을 조금 밖에 이용하지 않습니다. CachedRowSet 객체가 데이터 소스에 접속하는 것은, 데이터를 읽어내 자신에게 행을 읽어들일 때와 부하의 데이터 소스로 변경 내용을 반영할 때 뿐입니다. 그 이외 때는, 데이터의 변경중도 포함해, 데이터 소스로부터 절단 되고 있습니다. RowSet 객체는, 이와 같이, 데이터 소스로부터 절단 되고 있기 (위해)때문에 헛일이 적고, 그 외의 컴퍼넌트에 건네주기 쉬워지고 있습니다. 예를 들어, 미접속의 RowSet 객체를 직렬화해, 회선 경유로 PDA 등의 thin 클라이언트에 건네줄 수가 있습니다.  

1.0CachedRowSet 객체의 작성

다음의 코드는, 레퍼런스 구현 (RI)의 CachedRowSet의 디폴트 생성자 을 사용해, 디폴트의 CachedRowSet객체를 작성합니다.
     CachedRowSetImpl crs = new CachedRowSetImpl() ;k
 
이 새로운 CachedRowSet객체는, 그 프로퍼티을 BaseRowSet객체의 디폴트의 프로퍼티으로 설정합니다. 게다가 동기 프로바이더로서 RIOptimisticProvider객체를 가집니다. RI 에 포함되는 2 개의 SyncProvider구현 가운데 1 개,RIOptimisticProvider는, 동기 프로바이더가 지정되어 있지 않은 경우에 SyncFactory싱글 톤으로부터 제공되는 디폴트의 프로바이더입니다.  

SyncProvider 객체는,CachedRowSet 객체와 데이터 소스로부터 데이터를 읽어내 자신에게 데이터를 읽어들이는 리더 (RowSetReader 객체)를 제공합니다. 리더를 구현하는 것으로써,ResultSet 객체나 겉(표) 형식의 파일로부터 데이터를 읽어낼 수가 있습니다. SyncProvider 객체는, 라이터(RowSetWriter 객체)도 제공합니다. 라이터는, 부하의 데이터 소스내의 데이터로부터 절단 되고 있는 동안에 CachedRowSet 객체에 더해진 변경 내용을 동기 합니다.  

라이터를 구현하는 것으로써, 다양한 레벨로, 행 세트에 값을 읽어들인 후에 데이터 소스내의 값이 변경되었을 경우에 발생하는 경합의 체크나 예방을 실시할 수가 있습니다. RIOptimisticProvider 구현은, 경합이 거의 없는지, 전혀 없는 것으로서 락을 일절 설정하지 않습니다. 이 구현은, 경합이 없는 경우에게만,CachedRowSet 객체의 값으로 데이터 소스를 갱신합니다. 변경된 데이터를 데이터 소스에 기입하는 목적에서만 구현되는 라이터도 있습니다. 이 구현은, 경합의 체크를 실시하지 않는가, 그 완전히 역으로, 데이터 소스내의 데이터의 변경을 충분히 막을 수 있을 뿐(만큼)의 락을 설정하는 것에 의해 행해집니다. 또, 그 거의 중간의 라이터 구현도 있습니다.  

CachedRowSet 객체는,SyncFactory 싱글 톤에 등록된 임의의 SyncProvider 구현을 사용할 수 있습니다. 어플리케이션은, 다음의 코드를 호출하는 것으로, 등록되어 있는 SyncProvider 구현을 검출할 수 있습니다.

      java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
 

CachedRowSet 객체로 사용하는 SyncProvider객체를 지정하는 방법은, 다음의 2 대로입니다. 생성자 에 구현명을 제공한다
다음의 코드는, 디폴트 값 (다만 SyncProvider 를 지정)로 초기화되는 CachedRowSet 객체 crs2 를 작성합니다.

          CachedRowSetImpl crs2 = new CachedRowSetImpl(
                                 "com.fred.providers.HighAvailabilityProvider");
     
  • CachedRowSet 메소드 setSyncProvider를 사용해 SyncProvider 를 설정한다
    다음의 코드는,crsSyncProvider 객체 (디폴트의 생성자 으로 작성된 CachedRowSet 객체)를 리셋 합니다.
               crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
          
    SyncFactory및 SyncProvider를 참조해 주세요.

    2.0CachedRowSet 객체로부터의 데이터의 취득

    데이터는,ResultSet인터페이스로부터 상속된 취득 메소드를 사용해,CachedRowSet객체로부터 취득됩니다. 다음의 예는,crsCachedRowSet객체로서 행의 반복 처리를 실시해, 각 행으로부터 열의 값을 취득하는 방법을 나타냅니다. 최초의 예에서는, 열번호를 취하는 취득 메소드를 사용합니다. 2 번째의 예에서는, 렬명을 취하는 취득 메소드를 사용합니다. 열번호는, 일반적으로,RowSet객체의 커멘드가 SELECT * FROM TABLENAME의 형식이 되는 경우에 사용됩니다. 렬명은, 렬명을 지정하는 커멘드로 자주(잘) 사용됩니다.
        while (crs.next()) {
            String name = crs.getString(1);
            int id = crs.getInt(2);
            Clob comment = crs.getClob(3);
            short dept = crs.getShort(4);
            System.out.println(name + "  " + id + "  " + comment + "  " + dept);
        }
     
        while (crs.next()) {
            String name = crs.getString("NAME");
            int id = crs.getInt("ID");
            Clob comment = crs.getClob("COM");
            short dept = crs.getShort("DEPT");
            System.out.println(name + "  " + id + "  " + comment + "  " + dept);
        }
     

    3.0RowSetMetaData 의 취득

    어플리케이션은,RowSetMetaData객체상에 ResultSetMetaData메소드와 RowSetMetaData메소드를 호출하는 것으로,CachedRowSet객체내의 열에 관한 정보를 취득할 수 있습니다. 다음의 코드의 발췌에서는,crsCachedRowSet객체로서 이 처리에 대해 설명합니다. 1 행 째로는,crs내의 열에 관한 정보를 가지는 RowSetMetaData객체를 작성합니다. ResultSet인터페이스로부터 상속된 getMetaData메소드는,ResultSetMetaData객체를 돌려줍니다. 반환된 객체는, 변수 rsmd에 할당할 수 있기 전에 RowSetMetaData객체에 캐스트 됩니다. 2 행 째로는,jrs의 렬수를 확인합니다. 3 행 째로는,jrs의 2 번째의 열에 포함된 값의 JDBC 형을 가져옵니다.
         RowSetMetaData rsmd = (RowSetMetaData) crs.getMetaData();
         int count = rsmd.getColumnCount();
         int type = rsmd.getColumnType(2);
     
    RowSetMetaData인터페이스는, 다음의 2 개의 점으로써,ResultSetMetaData인터페이스와는 다릅니다. 주:RowSetMetaData객체를 돌려주기 위해서(때문에)는, 구현으로 java.sql.ResultSet에 정의된 getMetaData()메소드를 오버라이드(override) 해,RowSetMetaData객체를 돌려줄 필요가 있습니다.

    CachedRowSet 객체의 갱신

    CachedRowSet객체의 갱신 방법은 ResultSet객체의 갱신 방법과 같습니다만, 갱신중, 행 세트는 데이터 소스에 접속하고 있지 않았기 때문에, 부하의 데이터 소스로 변경을 더하는 추가 순서가 필요하게 됩니다. CachedRowSet객체는,updateRow메소드나 insertRow메소드를 호출한 뒤,acceptChanges메소드를 호출해, 갱신 내용을 데이터 소스에 기입할 필요가 있습니다. 다음의 예에서는,CachedRowSet객체 crs내의 행에 커서가 놓여져 있습니다. 이 코드는, 현재의 행의 2 개의 열의 값을 갱신해,RowSet객체의 부하의 데이터 소스를 갱신합니다.
         crs.updateShort(3, 58);
         crs.updateInt(4, 150000);
         crs.updateRow();
         crs.acceptChanges();
     

    다음의 예에서는, 삽입행으로 이동해, 삽입행 위에 새로운 행을 작성해, 이것을 행 세트에 삽입합니다. 게다가acceptChanges 메소드를 호출해, 부하의 데이터 소스에 새로운 행을 추가합니다. 취득 메소드의 경우와 같게, 갱신 메소드에서도, 열인덱스나 렬명을 사용해 처리 대상의 열을 지정할 수 있습니다.

         crs.moveToInsertRow();
         crs.updateString("Name", "Shakespeare");
         crs.updateInt("ID", 10098347);
         crs.updateShort("Age", 58);
         crs.updateInt("Sal", 150000);
         crs.insertRow();
         crs.moveToCurrentRow();
         crs.acceptChanges();
     

    주:insertRow() 메소드로,CachedRowSet 객체의 삽입행의 내용을 삽입하는 장소는, 구현으로 정의합니다. CachedRowSet 인터페이스의 레퍼런스 구현은, 현재의 행의 직후에 새로운 행을 삽입합니다만, 다른 임의의 개소에도 삽입하도록(듯이) 구현할 수 있습니다.  

    이러한 예에 있어서의 acceptChanges 메소드의 사용 방법에 주목해 주세요. 이 메소드는,RowSet 객체의 라이터를 내부에서 호출해, 데이터 소스로 변경을 기입하는 것으로,CachedRowSet 객체내의 변경 내용을 부하의 데이터 소스에 전달합니다. 이 때문에, 라이터는, 데이터 소스와의 접속을 확립하지 않으면 안됩니다. 최초의 2 개의 코드의 발췌는,updateRow 또는 insertRow 의 호출 후 즉시 acceptChanges 메소드를 호출합니다. 그러나, 복수의 행을 변경하는 경우는, updateRowinsertRow 의 호출이 모두 완료하고 나서 acceptChanges 를 호출하는 방법 쪽이 효율이 좋아집니다. acceptChanges 를 1 회 밖에 호출하지 않는 경우는, 접속을 1 개 확립하는 것만으로 끝납니다.  

    4.0 부하의 데이터 소스의 갱신

    acceptChanges메소드의 실행시에는, 행 세트에의 변경점을 부하의 데이터 소스에 기입하기 (위해)때문에, 배후에서 CachedRowSet객체의 라이터,RowSetWriterImpl객체가 불려 갑니다. 이 라이터가 구현되는 것으로, 데이터 소스에의 접속이 확립되어 갱신 정보가 기입해집니다.  

    라이터는, 섹션 1 의 「CachedRowSet 객체의 작성」으로 설명했던 대로,SyncProvider 인터페이스의 구현을 개입시켜 이용할 수 있습니다. 디폴트의 레퍼런스 구현 프로바이더 RIOptimisticProvider 는, 오프티미스틱 동시성 처리 제어 기구를 이용하기 위해(때문에), 라이터를 구현하고 있습니다. 즉, 행 세트가 데이타베이스로부터 절단 되고 있는 동안, 부하의 데이타베이스는 락 되지 않고, 데이터 소스에 데이터를 기입하기 전에 경합이 있는지 없는지의 확인을 하게만 됩니다. 경합이 있는 경우, 데이터 소스에는 아무것도 기입해지지 않습니다.  

    SyncProvider 클래스에 의해 제공되는 리더/라이터의 기능은, 플러그 인 가능하고, 데이터의 취득과 갱신의 커스터마이즈에 이용할 수 있습니다. 다른 동시성 처리 제어 기구가 필요한 경우는,setSyncProvider 메소드를 사용해, 다른 SyncProvider 구현을 플러그 인 할 수 있습니다.  

    오프티미스틱 동시성 처리 제어 루틴을 사용하기 위해(때문에),RIOptismisticProvider 는, 현재의 값과 원의 값 (현재의 값의 직전의 값)의 양쪽 모두를 보관 유지합니다. RowSet 객체내의 데이터가 변경되지 않았던 경우, 현재의 값과 원의 값은 동일 (RowSet 객체가 최초로 생성되었을 때의 값)이 됩니다. 그러나,RowSet 객체내의 값이 변경되었을 경우, 현재의 값과 원의 값은 일치하지 않습니다. 이 단계에서는, 원의 값은 초기치인 채입니다. 그 후의 RowSet 객체내의 데이터의 변경에 의해, 원의 값과 현재의 값은 일치하지 않게 됩니다만, 이전 현재의 값이었던 값이 원의 값이 됩니다.  

    원의 값을 추적하는 것으로, 라이터는,RowSet 객체의 원의 값과 데이타베이스내의 값을 비교할 수 있습니다. 데이타베이스내의 값이 RowSet 객체의 원의 값과 일치하지 않는 경우, 데이타베이스내의 값이 변경되고 있어 경합이 발생하고 있는 것을 의미합니다. 라이터를 사용해 경합의 체크를 실시하는지, 어느 정도까지 체크를 실시하는지, 경합을 어떻게 처리할까는, 모두 구현에 따라서 다릅니다.  

    5.0 청취자의 등록과 통지

    JavaBeans 컴퍼넌트이므로, 모든 행 세트는,BaseRowSet클래스로부터 청취자의 등록이라고 변경 내용을 통지하기 위한 메소드를 상속해, JavaBeans 이벤트 모델에 참여 합니다. CachedRowSet객체의 청취자는, 행 세트내로 변경이 있었는지의 여부를 통지되는 컴퍼넌트입니다. 예를 들어,CachedRowSet객체에 쿼리의 결과가 포함되어 이러한 결과가 겉(표)나 막대 그래프로서 표시된다고 합니다. 겉(표)나 막대 그래프는, 행 세트의 청취자로서 등록되는 것으로, 변경 내용을 반영하도록(듯이) 자신의 갱신을 실시할 수가 있습니다. 겉(표)나 막대 그래프의 클래스가 청취자가 되려면 ,RowSetListener인터페이스를 구현할 필요가 있습니다. 그 후, 이것들을 CachedRowSet객체의 청취자의 리스트에 추가합니다. 다음의 코드를 참조해 주세요.
        crs.addRowSetListener(table);
        crs.addRowSetListener(barGraph);
     
    커서를 이동하거나 데이터를 변경하거나 하는 CachedRowSet메소드도, 등록을 마친 청취자로 변경을 통지합니다. 따라서,crs내로 변경이 있으면(자),tablebarGraph는 그 통지를 받습니다.  

    6.0 thin 클라이언트에의 데이터의 송신

    CachedRowSet객체는, 주로, 어플리케이션 컴퍼넌트간에서의 데이터의 수수에 이용됩니다. CachedRowSet객체는 직렬화 가능해서, 예를 들어, 서버 환경에서 가동중의 엔터프라이즈 JavaBeans 컴퍼넌트에 의해 실행된 쿼리의 결과를, Web 브라우저로 가동중의 클라이언트에, 네트워크 경유로 송신하기 위해서 이용할 수가 있습니다.  

    미접속의 CachedRowSet 객체는, 같은 데이터를 가지는 ResultSet 객체보다 컴팩트해서, 자원의 제한이나 시큐리티상의 이유에 의해 JDBC 드라이버를 사용하는 것이 어려운 PDA 등의 thin 클라이언트에의 데이터 송신에 최적입니다. 이와 같이,CachedRowSet 객체에서는, JDBC API 를 완전하게 구현하지 않아도 행을 취득할 수 있습니다.  

    7.0 스크롤과 갱신

    CachedRowSet객체에는, 스크롤 기능이나 갱신 기능을 가지지 않는 ResultSet객체에 이러한 기능을 제공하는 기능도 있습니다. DBMS 가 스크롤과 갱신의 기능을 완전하게 지원하지 않는 경우는,CachedRowSet객체를 사용해, JDBC 테크놀러지를 사용 가능한 드라이버의 기능을 향상시킬 수가 있습니다. 스크롤 기능을 가지지 않는 읽기 전용의 ResultSet객체에 스크롤 기능과 갱신 기능을 갖게하려면 ,CachedRowSet객체를 작성해, 그 ResultSet객체의 데이터를 읽어들이는 것만으로 끝납니다. 구체적인 예에 대해서는, 다음의 코드의 발췌를 참조해 주세요. 이 예에서는,stmtStatement객체를 나타냅니다.
        ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
        CachedRowSetImpl crs = new CachedRowSetImpl() ;k
        crs.populate(rs);
     

    rs 객체의 경우와 같게,crs 객체에, 겉(표) EMPLOYEES 의 데이터가 추가됩니다. 다만,crs 의 커서는 전방, 후방, 또는 특정의 행으로 이동할 수 있는데 대해,rs 의 커서는 전방 밖에 이동할 수 없습니다. 또,crs 에 갱신 기능이 있는데 대해,rs 에는 갱신 기능은 없습니다. 이것은,CachedRowSet 객체에, 스크롤 기능과 갱신 기능이 디폴트로 준비되어 있기 때문입니다.  

    즉,CachedRowSet 객체는, 데이터 소스의 외부에서 캐쉬되는 미접속의 행이 됩니다. 사이즈가 작고, 직렬화 가능해서, 회선 경유로 간단하게 송신 가능할 뿐만 아니라, thin 클라이언트에의 데이터 송신에도 적합합니다. 다만, 메모리내에 동시에 포함할 수 있는 데이터량이 정해져 있기 (위해)때문에,CachedRowSet 객체의 사이즈는 제한되고 있습니다.  

    8.0 범용 데이터 액세스의 취득

    CachedRowSet클래스에는, RDB 이외의 소스로부터 데이터를 취득해, 포함할 수 있다고 하는 이점이 있습니다. 행 세트의 리더를 구현하는 것으로써, 임의의 겉(표) 형식의 데이터 소스 (스프레드쉬트, 플랫 파일을 포함한다) 행 세트의 데이터를 읽어내, read 할 수 있습니다. CachedRowSet객체와 그 메타데이타는, 모두 제로로부터 작성 가능해서, 행 세트의 팩토리로서 기능하는 컴퍼넌트는, 이 기능을 이용해, 비 SQL 데이터 소스로부터 데이터를 포함한 행 세트를 작성할 수 있습니다. 그러나, 대부분의 경우,CachedRowSet객체는, JDBC API 를 사용해 SQL 데이타베이스로부터 취득한 데이터를 포함합니다.  

    9.0 프로퍼티의 설정

    모든 행 세트는, 프로퍼티세트를 가지고 있습니다. 이 세트는 일반적으로, 툴을 사용해 설정합니다. 행 세트의 프로퍼티의 수와 종류는, 행 세트의 기능과 데이터의 취득 방법에 따라서 다릅니다. 예를 들어,ResultSet 객체로부터 데이터를 취득하는 행 세트는, 데이타베이스 접속을 작성하기 위해서 필요한 프로퍼티을 설정할 필요가 있습니다. 행 세트가 DriverManager기능을 사용해 접속을 작성하는 경우는, 적절한 드라이버를 식별하는 JDBC URL 의 프로퍼티과 사용자명과 패스워드를 지정하는 프로퍼티을 설정할 필요가 있습니다. 한편, 행 세트가 DataSource 객체를 사용해 접속을 작성하는 경우 (이 방법이 우선된다)는, JDBC URL 의 프로퍼티을 설정할 필요는 없습니다. 대신에, 데이터 소스의 논리명의 프로퍼티과 사용자명 및 패스워드의 프로퍼티을 설정할 필요가 있습니다.  

    주:DataSource 객체를 사용해 접속을 작성하는 경우는, Java Naming and Directory InterfaceTM (JNDI) API 를 사용하는 네임 서비스에,DataSource 객체를 등록할 필요가 있습니다. 등록은 일반적으로, 시스템 관리 책임자가 실시합니다.  

    행 세트에 데이타베이스의 데이터를 읽어들이려면 , 커멘드 프로퍼티을 설정할 필요가 있습니다. 이 프로퍼티은,PreparedStatement 객체를 나타내는 쿼리입니다. 이것에 의해, 쿼리는, 설계시는 아니고 실행시로 설정되는 파라미터 플레이스홀더를 가질 수가 있습니다. 이러한 플레이스홀더 파라미터에 값을 설정하기 위해(때문에), 행 세트는, 각 데이터형의 값을 설정하는 설정 메소드를 제공합니다. 이러한 설정 메소드는,PreparedStatement 인터페이스에 의해 제공되는 설정 메소드와 자주(잘) 닮았습니다.  

    다음의 코드의 발췌는,CachedRowSet 객체 crs 에 커멘드 프로퍼티을 설정하는 방법을 나타내고 있습니다. 툴을 사용해 프로퍼티을 설정하는 경우, 이 코드를 사용합니다.

        crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " +
                       "WHERE CREDIT_LIMIT > ? AND REGION = ? ");
     

    커멘드의 플레이스홀더 파라미터의 설정에 사용되는 값은,RowSet 객체의 params 필드에,Vector 객체로서 포함됩니다. CachedRowSet 클래스는,params 필드내의 요소를 설정하는 설정 메소드세트를 제공합니다. 다음의 코드의 발췌는, 방금전의 예로, 쿼리 안의 2 개의 파라미터를 설정하는 방법을 나타내고 있습니다.

        crs.setInt(1, 5000);
        crs.setString(2, "West");
     

    params 필드에 2 개의 요소가 추가되었습니다. 이것들은 각각, 요소 2 개(살) 분의 길이의 배열이 됩니다. 최초의 요소는 파라미터 번호, 2 번째의 요소는 설정하는 값을 나타냅니다. 이 경우,params 의 최초의 요소는 1,5000, 2 번째의 요소는 2,"West" 가 됩니다. 어플리케이션은,execute 메소드를 호출하는 것으로, 이 RowSet 객체의 리더를 호출합니다. 이것에 의해, 그 readData 메소드가 불려 갑니다. 이 구현에 포함되는 readData 는,params 내의 값을 취득해, 이것들을 사용해 커멘드의 플레이스홀더 파라미터를 설정합니다. 이하의 코드의 발췌에서는,Connection 객체 con 의 취득 후에, 리더가 플레이스홀더 파라미터를 설정하는 순서를 나타냅니다.

        PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
        reader.decodeParams();
        // decodeParams figures out which setter methods to use and does something
        // like the following:
        //    for (i = 0; i < params.length; i++) {
        //        pstmt.setObject(i + 1, params[i]);
        //    }
     

    이 시점에서,crs 의 커멘드는, 쿼리 "SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT > 5000 AND REGION = "West" 가 됩니다. readData 메소드는, 다음의 코드로 이 커멘드를 실행하는 것으로써,crs 에 읽히는 rs 의 데이터를 가져옵니다.

         ResultSet rs = pstmt.executeQuery();
     

    전의 코드의 발췌에서는, 배후에서 행해지는 처리에 대해 설명했습니다. 이러한 코드는, 어플리케이션내에서는 비표시이며,readDatadecodeParams 등의 메소드를 호출하지 않습니다. 이것에 대해서, 이하의 코드의 발췌는, 어플리케이션의 실행 내용을 나타내고 있습니다. 이 코드에서는, 행 세트의 커멘드를 설정해, 커멘드의 파라미터를 설정해, 커멘드를 실행합니다. execute 메소드를 호출하는 것만으로,crs 에, 요구된 겉(표) CUSTOMERS 의 데이터가 읽힙니다.

        crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
                       "WHERE CREDIT_LIMIT > ? AND REGION = ? ");
        crs.setInt(1, 5000);
        crs.setString(2, "West");
        crs.execute();
     

    10.0 페이징 데이터

    CachedRowSet객체는 데이터를 메모리에 포함하기 위해(때문에), 한 번에 포함할 수 있는 데이터의 양은 사용 가능한 메모리의 양에 의해 정해집니다. 이 제한을 회피하기 위해(때문에),CachedRowSet객체에서는,ResultSet객체로부터 「페이지」라고 불리는 체크로, 데이터를 취득할 수 있습니다. 이 기구를 이용하려면 , 어플리케이션으로,setPageSize메소드를 사용해, 페이지에 포함하는 행수를 설정합니다. 즉, 페이지 사이즈를 5 로 설정해 있는 경우, 데이터 소스로부터 한 번에 5 행의 데이터의 체크가 페치 됩니다. 또, 어플리케이션에서는, 옵션으로, 한 번에 페치 할 수 있는 최대행수도 설정할 수 있습니다. 최대행수를 0 으로 설정했을 경우, 또는 최대행수를 설정하지 않는 경우, 한 번에 페치 가능한 행수의 제한은 없습니다.  

    프로퍼티의 설정 후,CachedRowSet 객체에,populate 또는 execute 메소드를 사용해, 데이터를 포함할 필요가 있습니다. 이하의 코드행에,populate 메소드를 사용한 예를 나타냅니다. 이 메소드에서는,ResultSet 핸들과 행의 취득을 개시하는 ResultSet 객체내의 행의 2 개의 파라미터를 취합니다.

         CachedRowSet crs = new CachedRowSetImpl();
         crs.setMaxRows(20);
         crs.setPageSize(4);
         crs.populate(rsHandle, 10);
     
    이 코드를 실행하면(자),crsrsHandle의 10 행 째부터 시작되는 4 행 분이 포함됩니다.  

    다음의 코드의 발췌에 execute 메소드를 사용해,CachedRowSet 객체에 포함하는 예를 나타냅니다. 이 메소드는 파라미터로서 Connection 객체를 취하는 경우라고 취하지 않는 경우가 있습니다. 이 코드에서는 executeConnection 객체 conHandle 를 건네주고 있습니다.  

    다음의 코드의 발췌와 상기의 코드에는 2 개의 차이가 있습니다. 우선,setMaxRows 메소드를 호출하지 않기 때문에,crs 에 포함할 수 있는 최대행수에 제한이 없습니다 (crs 에는 항상, 메모리내에 포함할 수 있는 데이터량의 제한이 최우선으로 존재하는 것에 주의해 주세요). 2 점목의 차이는 execute 메소드에, 행의 취득을 개시하는 ResultSet 객체내로부터의 행 번호를 건네줄 수 없는 것입니다. 이 메소드는 항상 선두행으로부터 개시합니다.

         CachedRowSet crs = new CachedRowSetImpl();
         crs.setPageSize(5);
         crs.execute(conHandle);
     
    이 코드를 실행하면(자),crs에 대한 커멘드에 의해 생성된 ResultSet객체로부터 5 행 분의 데이터가 crs에 포함됩니다. crs의 라이터는 conHandle를 사용해 데이터 소스에 접속해,crs에 대해서 커멘드를 실행합니다. 이것에 의해, 어플리케이션은, 다른 CachedRowSet객체의 데이터의 조작과 같이 crs의 데이터를 조작할 수 있습니다.  

    어플리케이션으로 다음의 페이지 (데이터의 체크)에 액세스 하려면 ,nextPage 메소드를 호출합니다. 이 메소드는 새로운 CachedRowSet 객체를 작성해, 거기에 다음의 페이지의 데이터를 포함합니다. 예를 들어,CachedRowSet 객체의 커멘드가 1000 행 분의 데이터를 포함하는 ResultSet 객체 rs 를 돌려주었다고 합니다. 페이지 사이즈가 100 으로 설정되어 있는 경우,nextPage 메소드의 최초의 호출로,rs 의 선두의 100 행을 포함하는 CachedRowSet 객체가 작성됩니다. 이 선두의 100 행의 데이터의 처리가 끝나면(자), 어플리케이션은 다시 nextPage 메소드를 호출해,rs 로부터 다음의 100 행을 포함하는 다른 CachedRowSet 객체를 작성할 수 있습니다. 최초의 CachedRowSet 객체의 데이터는, 2번째의 CachedRowSet 객체의 데이터로 옮겨지고 있기 (위해)때문에, 메모리내에 남아 있지 않습니다. nextPage 메소드의 10 번째의 호출에서는, 10 번째의 CachedRowSet 객체에 rs 로부터의 마지막 100 행의 데이터가 포함되어 이것들이 메모리에 포함됩니다. 항상 메모리에는, 1 개의 CachedRowSet 객체의 데이터만이 포함되게 됩니다.  

    nextPage 메소드는, 현재의 페이지가 행의 마지막 페이지가 아닌 동안은 true 를 돌려주어, 그 이후의 페이지가 없어지면(자) false 를 돌려줍니다. 따라서, 다음의 코드행에 나타내도록(듯이),while 루프로 사용하면, 모든 페이지를 취득할 수 있습니다.

         CachedRowSet crs = CachedRowSetImpl();
         crs.setPageSize(100);
         crs.execute(conHandle);
    
         while(crs.nextPage()) {
             while(crs.next()) {
                 .  .  .  // operate on chunks (of 100 rows each) in crs, 
                       // row by row
             }
         }
     
    이 코드의 발췌를 실행하면(자), 어플리케이션은 1000 행을 모두 횡단(traverse) 합니다만, 메모리에는 한 번에 100 행까지 밖에 포함되지 않습니다.  

    CachedRowSet 인터페이스는 previousPage 메소드도 정의하고 있습니다. nextPage 메소드가 ResultSetnext 메소드에 유사하고 있는 것과 같이,previousPage 메소드는 ResultSetprevious 메소드를 닮아 있습니다. nextPage 메소드와 같게,previousPage 는 페이지 사이즈로서 설정되었을 뿐의 행수를 포함하는 CachedRowSet 객체를 작성합니다. 그 때문에, 예를 들어, 상기의 코드의 발췌의 마지막 while 루프내에서 previousPage 메소드를 사용해, 마지막 페이지로부터 선두의 페이지까지, 반대로 페이지를 이동할 수가 있습니다. previousPage 메소드는,while 루프로 사용할 수 있는 점으로써 nextPage 와도 닮았습니다. 다만, 전에 다른 페이지가 존재하는 동안 true 를 돌려주어, 그 이전의 페이지가 없어지면(자),false 를 돌려주는 점이 다릅니다.  

    다음의 코드의 발췌에 나타내도록(듯이),previous 메소드는 각 페이지의 마지막 행의 말미에 커서를 두는 것으로, 각 페이지의 맨 마지막 줄로부터 선두행까지 이동합니다. 혹은, 각 페이지의 선두행의 전에 커서를 두어,while 루프로 next 메소드를 사용해, 각 페이지의 선두행으로부터 맨 마지막 줄까지 이동할 수도 있습니다.  

    다음의 코드의 발췌에서는, 상기의 코드의 발췌의 계속으로, 10 개째의 CachedRowSet 객체의 커서가 마지막 행에 있으면(자) 가정하고 있습니다. 이 코드에서는 커서를 맨 마지막 줄의 후에 이동하고 있기 (위해)때문에,previous 메소드의 최초의 호출로, 커서를 맨 마지막 줄에 되돌립니다. 마지막 페이지 (CachedRowSet 객체 crs)의 모든 행을 이동하면(자), 코드는 while 루프에 들어가, 9 페이지눈으로 이동해, 역방향으로 행을 이동해, 8 페이지눈으로 이동해, 역방향으로 행을 이동해, 똑같이 해 선두 페이지의 선두행까지 나갑니다.

         crs.afterLast();
         while(crs.previous())  {
             .  .  .  // navigate through the rows, last to first
         {
         while(crs.previousPage())  {
             crs.afterLast();
             while(crs.previous())  {
                 .  .  .  // go from the last row to the first row of each page
             }
         }
     


    필드의 개요
    static boolean COMMIT_ON_ACCEPT_CHANGES
              acceptChanges()의 호출시에,CachedRowSet객체의 SyncProvider 로 변경을 위탁시킵니다.
     
    인터페이스 java.sql. ResultSet 로부터 상속된 필드
    CLOSE_CURSORS_AT_COMMIT , CONCUR_READ_ONLY , CONCUR_UPDATABLE , FETCH_FORWARD , FETCH_REVERSE , FETCH_UNKNOWN , HOLD_CURSORS_OVER_COMMIT , TYPE_FORWARD_ONLY , TYPE_SCROLL_INSENSITIVE , TYPE_SCROLL_SENSITIVE
     
    메소드의 개요
     void acceptChanges ()
              이 CachedRowSet 객체에 대한 행의 갱신, 삽입, 삭제등의 변경을 부하의 데이터 소스에 전달합니다.
     void acceptChanges (Connection  con)
              지정된 Connection객체를 사용해 데이터 소스에의 접속을 확립해,CachedRowSet 객체의 부하의 데이터 소스에 행의 갱신, 삽입, 삭제등의 변경을 모두 전달합니다.
     boolean columnUpdated (int idx)
              이 CachedRowSet 객체의 현재의 은행내의 지정된 열이 갱신되었는지의 여부를 나타냅니다.
     boolean columnUpdated (String  columnName)
              이 CachedRowSet 객체의 현재의 은행내의 지정된 열이 갱신되었는지의 여부를 나타냅니다.
     void commit ()
              CachedRowSet 객체의 SyncProvider 에는,ResultSetConnection 객체인가, 생성자 에게 건네지는 JDBC 프로퍼티이 포함됩니다.
     CachedRowSet createCopy ()
              이 CachedRowSet 객체의 데이터의 딥 카피인 RowSet 객체를 작성합니다.
     CachedRowSet createCopyNoConstraints ()
              이 CachedRowSet 객체의 딥 카피이지만, 독립하고 있는 CachedRowSet 객체를 작성합니다.
     CachedRowSet createCopySchema ()
              이 CachedRowSet 객체의 빈 상태(empty)의 카피인 CachedRowSet 객체를 작성합니다.
     RowSet createShared ()
              이 CachedRowSet 객체와 같은 데이터에 의해, 백업 된 새로운 RowSet 객체를 돌려줍니다.
     void execute (Connection  conn)
              데이터 소스가 되는 결과 세트를 생성하기 위한 지정의 접속을 사용해, 이 CachedRowSet 객체에 데이터를 읽어들입니다.
     int[] getKeyColumns ()
              이 CachedRowSet 객체의 행을 일의에 식별하는 키를 구성하는 열을 나타내는 1개이상의 열번호를 포함하는 배열을 돌려줍니다.
     ResultSet getOriginal ()
              이 CachedRowSet 객체의 원의 값을 포함하는 ResultSet 객체를 돌려줍니다.
     ResultSet getOriginalRow ()
              이 CachedRowSet 객체의 현재의 행만의 원의 값을 포함하는 ResultSet 객체를 돌려줍니다.
     int getPageSize ()
              CachedRowSet 객체의 페이지 사이즈를 돌려줍니다.
     RowSetWarning getRowSetWarnings ()
              이 RowSet 객체에 관한 호출에 의해 보고되는 최초의 경고를 돌려줍니다.
     boolean getShowDeleted ()
              삭제 마크를 붙일 수 있었던 행을 현재의 행 세트내에 표시할지 어떨지를 나타내는 boolean 를 가져옵니다.
     SyncProvider getSyncProvider ()
              이 CachedRowSet 객체의 SyncProvider 구현을 가져옵니다.
     String getTableName ()
              이 CachedRowSet 객체의 작성에 사용된 객체 (테이블)의 식별자를 돌려줍니다.
     boolean nextPage ()
              CachedRowSet 의 현재의 페이지를 증분 합니다.
     void populate (ResultSet  data)
              이 CachedRowSet 객체로 지정된 ResultSet객체의 데이터를 읽어들입니다.
     void populate (ResultSet  rs, int startRow)
              이 CachedRowSet 객체로 지정된 ResultSet객체의 데이터를 읽어들입니다.
     boolean previousPage ()
              CachedRowSet 의 현재의 페이지를 감 분 합니다.
     void release ()
              이 CachedRowSet 객체의 현재의 컨텐츠를 해제해, 등록을 마친 모든 청취자에게 rowSetChanged 이벤트를 송신합니다.
     void restoreOriginal ()
              이 CachedRowSet 객체를 원의 값 (전회의 변경 세트의 전의 값)에 되돌립니다.
     void rollback ()
              CachedRowSet 객체의 SyncProvider 에는, 원의 ResultSetConnection 객체인가, 거기에 건네받는 JDBC 프로퍼티이 포함됩니다.
     void rollback (Savepoint  s)
              CachedRowSet 객체의 SyncProvider 에는, 원의 ResultSetConnection 객체인가, 거기에 건네받는 JDBC 프로퍼티이 포함됩니다.
     void rowSetPopulated (RowSetEvent  event, int numRows)
              등록이 끝난 청취자에게, 지정된 RowSetEvent 객체내의 RowSet 객체가 다수의 추가행을 읽어들인 것을 통지합니다.
     void setKeyColumns (int[] keys)
              이 CachedRowSet 객체의 keyCols 필드에, 지정된 열번호의 배열 (이 CachedRowSet 객체내의 행을 일의에 식별하는 키를 구성한다)을 설정합니다.
     void setMetaData (RowSetMetaData  md)
              지정된 RowSetMetaData객체를 사용해,CachedRowSet 객체의 메타데이타를 설정합니다.
     void setOriginalRow ()
              이 CachedRowSet 객체의 현재의 행을 원의 행으로서 설정합니다.
     void setPageSize (int size)
              CachedRowSet 객체의 페이지 사이즈를 설정합니다.
     void setShowDeleted (boolean b)
              showDeleted 프로퍼티으로서 삭제 마크 첨부의 행을 현재의 행 세트내에 표시할지 어떨지를 지정하는 boolean 를 설정합니다.
     void setSyncProvider (String  provider)
              이 CachedRowSet 객체의 SyncProvider 객체로 지정한 객체를 설정합니다.
     void setTableName (String  tabName)
              이 CachedRowSet 객체의 파생원의 테이블의 식별자를, 지정의 테이블명으로 설정합니다.
     int size ()
              이 CachedRowSet 객체내의 행수를 돌려줍니다.
     Collection <? > toCollection ()
              이 CachedRowSet 객체를, 이 CachedRowSet 객체의 모든 데이터를 포함하는 Collection 객체로 변환합니다.
     Collection <? > toCollection (int column)
              이 CachedRowSet 객체내의 지정된 열을 Collection 객체로 변환합니다.
     Collection <? > toCollection (String  column)
              이 CachedRowSet 객체내의 지정된 열을 Collection객체로 변환합니다.
     void undoDelete ()
              현재의 행의 삭제를 취소해, 청취자로 행이 변경된 것을 통지합니다.
     void undoInsert ()
              만약 행이 삽입된 상태이면,CachedRowSet 객체로부터 현재의 행을 즉시 삭제해, 청취자로 행이 변경된 것을 통지합니다.
     void undoUpdate ()
              만약 행이 변경되고 있으면, 전회의 갱신 조작을 즉시 바탕으로 되돌립니다.
     
    인터페이스 javax.sql. RowSet 로부터 상속된 메소드
    addRowSetListener , clearParameters , execute , getCommand , getDataSourceName , getEscapeProcessing , getMaxFieldSize , getMaxRows , getPassword , getQueryTimeout , getTransactionIsolation , getTypeMap , getUrl , getUsername , isReadOnly , removeRowSetListener , setArray , setAsciiStream , setAsciiStream , setAsciiStream , setAsciiStream , setBigDecimal , setBigDecimal , setBinaryStream , setBinaryStream , setBinaryStream , setBinaryStream , setBlob , setBlob , setBlob , setBlob , setBlob , setBlob , setBoolean , setBoolean , setByte , setByte , setBytes , setBytes , setCharacterStream , setCharacterStream , setCharacterStream , setCharacterStream , setClob , setClob , setClob , setClob , setClob , setClob , setCommand , setConcurrency , setDataSourceName , setDate , setDate , setDate , setDate , setDouble , setDouble , setEscapeProcessing , setFloat , setFloat , setInt , setInt , setLong , setLong , setMaxFieldSize , setMaxRows , setNCharacterStream , setNCharacterStream , setNCharacterStream , setNCharacterStream , setNClob , setNClob , setNClob , setNClob , setNClob , setNClob , setNString , setNString , setNull , setNull , setNull , setNull , setObject , setObject , setObject , setObject , setObject , setObject , setPassword , setQueryTimeout , setReadOnly , setRef , setRowId , setRowId , setShort , setShort , setSQLXML , setSQLXML , setString , setString , setTime , setTime , setTime , setTime , setTimestamp , setTimestamp , setTimestamp , setTimestamp , setTransactionIsolation , setType , setTypeMap , setURL , setUrl , setUsername
     
    인터페이스 java.sql. ResultSet 로부터 상속된 메소드
    absolute , afterLast , beforeFirst , cancelRowUpdates , clearWarnings , close , deleteRow , findColumn , first , getArray , getArray , getAsciiStream , getAsciiStream , getBigDecimal , getBigDecimal , getBigDecimal , getBigDecimal , getBinaryStream , getBinaryStream , getBlob , getBlob , getBoolean , getBoolean , getByte , getByte , getBytes , getBytes , getCharacterStream , getCharacterStream , getClob , getClob , getConcurrency , getCursorName , getDate , getDate , getDate , getDate , getDouble , getDouble , getFetchDirection , getFetchSize , getFloat , getFloat , getHoldability , getInt , getInt , getLong , getLong , getMetaData , getNCharacterStream , getNCharacterStream , getNClob , getNClob , getNString , getNString , getObject , getObject , getObject , getObject , getRef , getRef , getRow , getRowId , getRowId , getShort , getShort , getSQLXML , getSQLXML , getStatement , getString , getString , getTime , getTime , getTime , getTime , getTimestamp , getTimestamp , getTimestamp , getTimestamp , getType , getUnicodeStream , getUnicodeStream , getURL , getURL , getWarnings , insertRow , isAfterLast , isBeforeFirst , isClosed , isFirst , isLast , last , moveToCurrentRow , moveToInsertRow , next , previous , refreshRow , relative , rowDeleted , rowInserted , rowUpdated , setFetchDirection , setFetchSize , updateArray , updateArray , updateAsciiStream , updateAsciiStream , updateAsciiStream , updateAsciiStream , updateAsciiStream , updateAsciiStream , updateBigDecimal , updateBigDecimal , updateBinaryStream , updateBinaryStream , updateBinaryStream , updateBinaryStream , updateBinaryStream , updateBinaryStream , updateBlob , updateBlob , updateBlob , updateBlob , updateBlob , updateBlob , updateBoolean , updateBoolean , updateByte , updateByte , updateBytes , updateBytes , updateCharacterStream , updateCharacterStream , updateCharacterStream , updateCharacterStream , updateCharacterStream , updateCharacterStream , updateClob , updateClob , updateClob , updateClob , updateClob , updateClob , updateDate , updateDate , updateDouble , updateDouble , updateFloat , updateFloat , updateInt , updateInt , updateLong , updateLong , updateNCharacterStream , updateNCharacterStream , updateNCharacterStream , updateNCharacterStream , updateNClob , updateNClob , updateNClob , updateNClob , updateNClob , updateNClob , updateNString , updateNString , updateNull , updateNull , updateObject , updateObject , updateObject , updateObject , updateRef , updateRef , updateRow , updateRowId , updateRowId , updateShort , updateShort , updateSQLXML , updateSQLXML , updateString , updateString , updateTime , updateTime , updateTimestamp , updateTimestamp , wasNull
     
    인터페이스 java.sql. Wrapper 로부터 상속된 메소드
    isWrapperFor , unwrap
     
    인터페이스 javax.sql.rowset. Joinable 로부터 상속된 메소드
    getMatchColumnIndexes , getMatchColumnNames , setMatchColumn , setMatchColumn , setMatchColumn , setMatchColumn , unsetMatchColumn , unsetMatchColumn , unsetMatchColumn , unsetMatchColumn
     

    필드의 상세

    COMMIT_ON_ACCEPT_CHANGES

    static final boolean COMMIT_ON_ACCEPT_CHANGES
    acceptChanges()의 호출시에,CachedRowSet객체의 SyncProvider 로 변경을 위탁시킵니다. false 로 설정되어 있는 경우, 변경 내용은,CachedRowSet인터페이스 트랜잭션(transaction) 메소드가 불려 갈 때까지위탁되지 않습니다.

    관련 항목:
    commit() , rollback() , 정수 필드치
    메소드의 상세

    populate

    void populate(ResultSet  data)
                  throws SQLException 
    CachedRowSet 객체로 지정된 ResultSet객체의 데이터를 읽어들입니다.  

    이 메소드는, 어플리케이션이 오픈하고 있는 ResultSet 객체에 접속하고 있을 때 execute 메소드의 대체로서 사용할 수 있습니다. 새로운 접속을 열어 이 CachedRowSet객체의 커멘드를 재실행할 필요가 없는 점으로써,populate 메소드는, 파라미터를 취하지 않는 execute메소드보다 효율적입니다. 또,populate 메소드를 사용하는 것은,ResultSet객체를 취하는 execute 메소드보다 편리합니다.

    파라미터:
    data - 이 CachedRowSet 객체에 읽힌다 데이터를 포함한 ResultSet 객체
    예외:
    SQLException - null 의 ResultSet 객체가 제공되었을 경우, 또는 이 CachedRowSet 객체가 관련하는 ResultSetMetaData 객체를 취득할 수 없는 경우
    관련 항목:
    execute(java.sql.Connection) , ResultSet , ResultSetMetaData

    execute

    void execute(Connection  conn)
                 throws SQLException 
    데이터 소스가 되는 결과 세트를 생성하기 위한 지정의 접속을 사용해, 이 CachedRowSet 객체에 데이터를 읽어들입니다. 이 메소드는, 작성하는 모든 데이타베이스 접속을 클로즈 하는 것으로, 데이터 소스로부터 데이터를 읽어내고 있을 때와 데이터 소스에 데이터를 기입하고 있을 때 이외, 이 CachedRowSet객체가 미접속 상태인 것을 보증합니다.  

    CachedRowSet객체의 리더는, 행 세트의 커멘드를 실행해, 결과적으로 생성되는 ResultSet 객체로부터 이 CachedRowSet 객체에 데이터를 읽어들이기 위해서(때문에),conn를 사용해 데이터 소스에의 접속을 확립합니다. 또, 이 메소드는, 이 CachedRowSet객체의 생성 후에, conn 를 클로즈 합니다.  

    구현의 생성 후에 이 메소드를 호출하면(자), 컨텐츠와 메타데이타가 리셋 됩니다. 또,acceptChanges메소드를 호출해, 아직 적용하고 있지 않는 갱신을 확정한 뒤, 이 메소드를 호출하면(자), 갱신 내용은 없어집니다.

    파라미터:
    conn - 유효한 프로퍼티을 가지는 표준 JDBC Connection 객체 properties
    예외:
    SQLException - 무효인 Connection 객체가 제공되었을 경우, 또는 데이터 소스와의 접속의 확립시에 에러가 발생했을 경우
    관련 항목:
    populate(java.sql.ResultSet) , Connection

    acceptChanges

    void acceptChanges()
                       throws SyncProviderException 
    CachedRowSet 객체에 대한 행의 갱신, 삽입, 삭제등의 변경을 부하의 데이터 소스에 전달합니다.  

    이 메소드는, 이 CachedRowSet객체의 라이터상에서 불려 가 배후에서 처리를 실시합니다. 표준 CachedRowSet 구현은,SyncFactory싱글 톤을 사용해 SyncProvider 인스턴스를 취득하는 것으로써,RowSetWriter객체 (라이터)를 제공합니다. 라이터는, 이 CachedRowSet객체에의 변경을 데이터 소스에 반송하려고 합니다.  

    acceptChanges메소드가 정상적으로 실행되었을 경우, 데이터 소스에 변경이 기입해져 현재의 행의 값이 원의 행의 값으로 변경됩니다.  

    사용하는 SyncProvider구현의 동기 레벨에 의해, 라이터는 원의 값과 데이터 소스내의 값을 비교해, 경합의 체크를 실시합니다. 경합이 검출되었을 경우, 예를 들어 RIOptimisticProvider구현은,SyncProviderException 를 throw 해, 데이터 소스에는 아무것도 기입하지 않습니다.  

    어플리케이션은,SyncProviderException객체를 캐치 해, 이 객체에 포함되는 SyncResolver객체를 취득할 수가 있습니다. SyncResolver객체는, 행 마다 경합을 일람 해, 현재 존재하는 경합을 해결할 때까지 새로운 경합이 발생하지 않게, 데이터 소스를 잠급니다. 게다가 개개의 경합에 대해서, 경합을 검사해, 데이터 소스에 남기는 값을 설정하는 메소드를 제공합니다. 모든 경합이 해결되면(자), 어플리케이션은 재차 acceptChanges메소드를 호출해, 해결된 값을 데이터 소스에 기입할 필요가 있습니다. 데이터 소스내의 모든 값이 벌써 지속치인 경우,acceptChanges메소드는 아무것도 실시하지 않습니다.  

    일부의 프로바이더 구현은, 경합을 막기 위해서(때문에) 락을 사용합니다. 이 경우,acceptChanges메소드를 호출했을 때, 라이터에 의한 데이터 소스에의 변경의 기입은 반드시 성공합니다. 이 메소드는,updateRow메소드,insertRow 메소드, 또는 deleteRow메소드의 호출 후 즉시 호출할 수 있습니다만, 모든 변경이 완료해, 1 개(살)만 접속을 확립하면 좋은 상태로 호출하는 편이 효율적입니다.  

    주:acceptChanges() 메소드는,COMMIT_ON_ACCEPT_CHANGES가 true 로 설정되어 있는지 어떤지를 판단합니다. true로 설정되어 있는 경우, 동기내의 모든 갱신이 데이터 소스에 위탁됩니다. 그 이외의 경우, 어플리케이션은,commit()메소드나 rollback() 메소드를 명시적으로 호출할필요가 있습니다.

    예외:
    SQLException - 커서가 삽입행에 있는 경우
    SyncProviderException - 부하의 동기 프로바이더의 라이터가, 데이터 소스에의 갱신의 기입에 실패했을 경우
    관련 항목:
    acceptChanges(java.sql.Connection) , RowSetWriter , SyncFactory , SyncProvider , SyncProviderException , SyncResolver

    acceptChanges

    void acceptChanges(Connection  con)
                       throws SyncProviderException 
    지정된 Connection객체를 사용해 데이터 소스에의 접속을 확립해,CachedRowSet 객체의 부하의 데이터 소스에 행의 갱신, 삽입, 삭제등의 변경을 모두 전달합니다.  

    이제(벌써) 한편의 acceptChanges 메소드는 RowSet객체내에 벌써 정의되고 있는 Connection 객체 (초기 생성시에 사용되는 접속)를 사용하므로, 접속을 건네받지 않습니다.  

    이 형식의 acceptChanges메소드는, 인수를 취하지 않는 형식과 자주(잘) 닮습니다만, 부하의 데이터 소스가 JDBC 데이터 소스인 경우 밖에 사용할 수 없는 점으로써, 그 외의 형식과는 다릅니다. SyncProvider 는,CachedRowSet객체가 정상적으로 동기 되도록(듯이), 갱신된 Connection 프로퍼티을 사용해 RowSetWriter구성을 리셋 할 필요가 있습니다.

    acceptChanges메소드가 정상적으로 실행되었을 경우, 데이터 소스에 변경이 기입해져 현재의 행의 값이 원의 행의 값으로 변경됩니다.  

    사용하는 SyncProvider구현의 동기 레벨에 의해, 라이터는 원의 값과 데이터 소스내의 값을 비교해, 경합의 체크를 실시합니다. 경합이 검출되었을 경우, 예를 들어 RIOptimisticProvider구현은,SyncProviderException 를 throw 해, 데이터 소스에는 아무것도 기입하지 않습니다.  

    어플리케이션은,SyncProviderException객체를 캐치 해, 이 객체에 포함되는 SyncResolver객체를 취득할 수가 있습니다. SyncResolver객체는, 행 마다 경합을 일람 해, 현재 존재하는 경합을 해결할 때까지 새로운 경합이 발생하지 않게, 데이터 소스를 잠급니다. 게다가 개개의 경합에 대해서, 경합을 검사해, 데이터 소스에 남기는 값을 설정하는 메소드를 제공합니다. 모든 경합이 해결되면(자), 어플리케이션은 재차 acceptChanges메소드를 호출해, 해결된 값을 데이터 소스에 기입할 필요가 있습니다. 데이터 소스내의 모든 값이 벌써 지속치인 경우,acceptChanges메소드는 아무것도 실시하지 않습니다.  

    일부의 프로바이더 구현은, 경합을 막기 위해서(때문에) 락을 사용합니다. 이 경우,acceptChanges메소드를 호출했을 때, 라이터에 의한 데이터 소스에의 변경의 기입은 반드시 성공합니다. 이 메소드는,updateRow메소드,insertRow 메소드, 또는 deleteRow메소드의 호출 후 즉시 호출할 수 있습니다만, 모든 변경이 완료해, 1 개(살)만 접속을 확립하면 좋은 상태로 호출하는 편이 효율적입니다.  

    주:acceptChanges() 메소드는,COMMIT_ON_ACCEPT_CHANGES가 true 로 설정되어 있는지 어떤지를 판단합니다. true로 설정되어 있는 경우, 동기내의 모든 갱신이 데이터 소스에 위탁됩니다. false 의 경우, 어플리케이션은,commit메소드나 rollback 메소드를 명시적으로 호출할필요가 있습니다.

    파라미터:
    con - 표준 JDBC Connection 객체
    예외:
    SQLException - 커서가 삽입행에 있는 경우
    SyncProviderException - 부하의 동기 프로바이더의 라이터가, 데이터 소스에의 갱신의 기입에 실패했을 경우
    관련 항목:
    acceptChanges() , RowSetWriter , SyncFactory , SyncProvider , SyncProviderException , SyncResolver

    restoreOriginal

    void restoreOriginal()
                         throws SQLException 
    CachedRowSet 객체를 원의 값 (전회의 변경 세트의 전의 값)에 되돌립니다. 행 세트가 변경되어 있지 않은 경우나, 변경 세트가 1 개 밖에 없는 경우는, 이 CachedRowSet객체에 읽힌 값이 원의 값이 됩니다.  

    이 메소드가 불려 갔을 경우,CachedRowSet구현은, 현재의 행 세트 인스턴스에의 모든 갱신, 삽입, 및 삭제를 이전의 값으로 옮겨놓을 필요가 있습니다. 게다가 커서를 최초의 행에 되돌려,rowSetChanged이벤트를 트리거해, 등록을 마친 모든 청취자에게 통지를 보낼 필요가 있습니다.

    예외:
    SQLException - 이 CachedRowSet 객체의 현재의 값을 이전의 값에 되돌리고 있는 동안에 에러가 발생했을 경우
    관련 항목:
    RowSetListener.rowSetChanged(javax.sql.RowSetEvent)

    release

    void release()
                 throws SQLException 
    CachedRowSet 객체의 현재의 컨텐츠를 해제해, 등록을 마친 모든 청취자에게 rowSetChanged 이벤트를 송신합니다. 이 메소드를 호출하면(자), 아직 적용되지 않은 갱신은 모두 파기되어 행 세트의 행이 모두 삭제됩니다. 부하의 데이터 소스와의 대화는 행해지지 않기 때문에, 행 세트의 컨텐츠, 메타데이타, 컨텐츠의 갱신을 복원할 수 없습니다.  

    CachedRowSet객체는, 컨텐츠와 그 갱신이 완전하게 소거될 때까지 락 됩니다. 따라서, 이 RowSet객체에의 참조를 포함하는 그 외의 컴퍼넌트에 의한 더티 읽기는 발생하지 않습니다. 또, 이 CachedRowSet객체를 읽어내는 모든 컴퍼넌트가 읽기를 완료할 때까지, 컨텐츠를 해제할 수 없습니다. 이 CachedRowSet객체의 동작은,rowSetChanged 이벤트가 트리거된 뒤, 정상적인 상태에 돌아옵니다.  

    JDBC 프로퍼티과 Synchronization SPI 프로퍼티을 포함한 메타데이타는, 장래 사용하기 위해서 보관 유지됩니다. command프로퍼티등의 프로퍼티은, 이 CachedRowSet객체의 생성원의 데이터 소스에 관련지을 필요가 있습니다.  

    close 메소드는, 모든 행 세트를 복원 가능으로 해, 가비지 컬렉터에 행 세트의 Java VM자원을 허가합니다만, 이 메소드는, 행 세트를 비웁니다.

    예외:
    SQLException - 이 CachedRowSet 객체의 컨텐츠의 플래시시에 에러가 발생했을 경우
    관련 항목:
    RowSetListener.rowSetChanged(javax.sql.RowSetEvent) , ResultSet.close()

    undoDelete

    void undoDelete()
                    throws SQLException 
    현재의 행의 삭제를 취소해, 청취자로 행이 변경된 것을 통지합니다. 이 메소드를 호출한 뒤, 현재의 행은 삭제의 대상으로부터 제외됩니다. 이 메소드는, 행 세트의 수명의 사이 언제라도 호출할 수가 있습니다.  

    게다가 복수의 행의 삭제를 취소할 수도 있습니다. 이 경우는, 다음과 같은 커서 위치 제어 메소드를 사용해, 커서의 위치를 조정합니다.

    • CachedRowSet.absolute
    • CachedRowSet.first
    • CachedRowSet.last

    예외:
    SQLException - (1) 현재의 행이 삭제되어 있지 않은 경우, (2) 커서가 삽입행, 최초의 행의 전, 또는 맨 마지막 줄의 뒤에 있는 경우
    관련 항목:
    undoInsert() , ResultSet.cancelRowUpdates()

    undoInsert

    void undoInsert()
                    throws SQLException 
    만약 행이 삽입된 상태이면,CachedRowSet 객체로부터 현재의 행을 즉시 삭제해, 청취자로 행이 변경된 것을 통지합니다. 이 메소드는, 행 세트의 수명의 사이 언제라도 호출할 수 있습니다. 현재의 행이 예외 제한 (아래와 같이 참조) 내에 있는 경우, 현재의 행의 삽입을 취소합니다.  

    게다가 복수의 행의 삽입을 취소할 수도 있습니다. 이 경우는, 다음과 같은 커서 위치 제어 메소드를 사용해, 커서의 위치를 조정합니다.

    • CachedRowSet.absolute
    • CachedRowSet.first
    • CachedRowSet.last

    예외:
    SQLException - (1) 현재의 행이 삽입되어 있지 않은 경우, (2) 커서가 최초의 행의 전, 맨 마지막 줄의 뒤, 또는 삽입행에 있는 경우
    관련 항목:
    undoDelete() , ResultSet.cancelRowUpdates()

    undoUpdate

    void undoUpdate()
                    throws SQLException 
    만약 행이 변경되고 있으면, 전회의 갱신 조작을 즉시 바탕으로 되돌립니다. 이 메소드는, 최종적으로 은행내의 모든 갱신이 전회의 동기화 (acceptChanges) 또는 생성의 직전 상태에 돌아오도록(듯이), 모든 열의 갱신을 바탕으로 되돌립니다. 이 메소드는, 삽입행의 갱신중에도 호출할 수가 있습니다.  

    undoUpdate 는, 행 세트의 수명의 사이 언제라도 호출할 수가 있습니다. 다만, 동기화를 한 뒤, 행 세트에 한층 더 변경이 더해질 때까지는, 이 메소드는 아무것도 실시하지 않습니다.

    예외:
    SQLException - 커서가, 이 CachedRowSet 객체의 최초의 행의 전 또는 마지막 행의 뒤에 있는 경우
    관련 항목:
    undoDelete() , undoInsert() , ResultSet.cancelRowUpdates()

    columnUpdated

    boolean columnUpdated(int idx)
                          throws SQLException 
    CachedRowSet 객체의 현재의 은행내의 지정된 열이 갱신되었는지의 여부를 나타냅니다.

    파라미터:
    idx - 갱신의 체크를 실시하는 열을 나타내는 int
    반환값:
    지정된 열이 분명하게 갱신되고 있는 경우는 true, 그렇지 않은 경우는 false
    예외:
    SQLException - 커서가 삽입행, 최초의 행의 전, 또는 맨 마지막 줄의 뒤에 있는 경우
    관련 항목:
    DatabaseMetaData.updatesAreDetected(int)

    columnUpdated

    boolean columnUpdated(String  columnName)
                          throws SQLException 
    CachedRowSet 객체의 현재의 은행내의 지정된 열이 갱신되었는지의 여부를 나타냅니다.

    파라미터:
    columnName - 갱신의 체크를 실시하는 열의 이름을 지정하는 String 객체
    반환값:
    열이 분명하게 갱신되고 있는 경우는 true, 그렇지 않은 경우는 false
    예외:
    SQLException - 커서가 삽입행, 최초의 행의 전, 또는 맨 마지막 줄의 뒤에 있는 경우
    관련 항목:
    DatabaseMetaData.updatesAreDetected(int)

    toCollection

    Collection <? > toCollection()
                               throws SQLException 
    CachedRowSet 객체를, 이 CachedRowSet 객체의 모든 데이터를 포함하는 Collection 객체로 변환합니다. Collection 시스템의 추상성에 의해, 구현은, 이 Collection객체를 어느 정도 자유롭게 표현할 수가 있습니다. 각 행은 범용적인 Collection구현인가, 또는 TreeMap객체나 Vector객체등이 특수한 Collection구현의 어느 쪽인지로 완전하게 표현할 필요가 있습니다. SQL NULL렬치는 Java 프로그램 언어로 null 로서 표현할 필요가 있습니다.  

    CachedRowSet 인터페이스의 표준적인 레퍼런스 구현에서는, 행 세트에 TreeMap객체를 사용해, 각 행의 값을 Vector객체에 포함합니다. 대부분의 구현으로와 같이 처리하는 것이 상정됩니다.  

    TreeMap형의 컬렉션에 의해, 키의 클래스의 본래의 순서에 따라, 맵이 승순으로 소트 됩니다. 각 키는,RowSet객체의 1 행에 대응하는 Vector 객체를 참조합니다. 따라서, 각 Vector객체의 사이즈는,RowSet 객체내의 렬수에 정확하게 일치할 필요가 있습니다. TreeMap컬렉션으로 사용하는 키는, 구현 마다 결정합니다. 구현에서는,RowSet 객체 자체, 또는 부하의 SQL 데이터에 벌써 설정되어 있는 키에 의해, 내부의 RowSet표 구조내의 사용 가능한 세트 키를 이용할 수가 있습니다.  

    반환값:
    CachedRowSet 객체의 각 행의 값을 포함하는 Collection 객체
    예외:
    SQLException - 컬렉션의 생성시에 에러가 발생했을 경우
    관련 항목:
    toCollection(int) , toCollection(String)

    toCollection

    Collection <? > toCollection(int column)
                               throws SQLException 
    CachedRowSet 객체내의 지정된 열을 Collection 객체로 변환합니다. Collection 시스템의 추상성에 의해, 구현은, 이 Collection객체를 어느 정도 자유롭게 표현할 수가 있습니다. 각 렬치는 범용적인 Collection 구현인가, 또는 Vector객체등이 특수한 Collection 구현의 어느 쪽인지로 완전하게 표현할 필요가 있습니다. SQL NULL렬치는 Java 프로그램 언어로 null 로서 표현할 필요가 있습니다.  

    표준적인 레퍼런스 구현에서는,Vector객체를 사용해, 렬치를 포함합니다만, 대부분의 구현으로와 같이 처리하는 것이 상정됩니다. Vector객체를 사용하는 경우는, 사이즈를 이 CachedRowSet객체의 행수와 정확하게 일치시킬 필요가 있습니다.

    파라미터:
    column - 치를 Collection 객체로 표현한다 열을 나타내는 int
    반환값:
    CachedRowSet 객체의 지정된 열에 포함되었다 값을 포함한 Collection 객체
    예외:
    SQLException - 컬렉션의 생성시에 에러가 발생했을 경우, 또는 무효인 열 ID 가 제공되었을 경우
    관련 항목:
    toCollection() , toCollection(String)

    toCollection

    Collection <? > toCollection(String  column)
                               throws SQLException 
    CachedRowSet 객체내의 지정된 열을 Collection객체로 변환합니다. Collection 시스템의 추상성에 의해, 구현은, 이 Collection객체를 어느 정도 자유롭게 표현할 수가 있습니다. 각 렬치는 범용적인 Collection 구현인가, 또는 Vector객체등이 특수한 Collection 구현의 어느 쪽인지로 완전하게 표현할 필요가 있습니다. SQL NULL렬치는 Java 프로그램 언어로 null 로서 표현할 필요가 있습니다.  

    표준적인 레퍼런스 구현에서는,Vector객체를 사용해, 렬치를 포함합니다만, 대부분의 구현으로와 같이 처리하는 것이 상정됩니다. Vector객체를 사용하는 경우는, 사이즈를 이 CachedRowSet객체의 행수와 정확하게 일치시킬 필요가 있습니다.

    파라미터:
    column - 컬렉션으로 표현되는 값을 가지는 열의 이름을 지정하는 String 객체
    반환값:
    CachedRowSet 객체의 지정된 열에 포함되었다 값을 포함한 Collection 객체
    예외:
    SQLException - 컬렉션의 생성시에 에러가 발생했을 경우, 또는 무효인 열 ID 가 제공되었을 경우
    관련 항목:
    toCollection() , toCollection(int)

    getSyncProvider

    SyncProvider  getSyncProvider()
                                 throws SQLException 
    CachedRowSet 객체의 SyncProvider 구현을 가져옵니다. 행 세트는, 이 메소드를 내부에서 사용해, 행 세트와 데이터 소스간의 읽어내 또는 기입해 조작을 트리거합니다. 예를 들어, 행 세트는, 데이터를 포함하기 위해(때문에),SyncProvider로부터 행 세트 리더 (RowSetReader객체)의 핸들을 취득해야 하는 경우가 있습니다.
         RowSetReader rowsetReader = null;
         SyncProvider provider = 
             SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider");
             if (provider instanceof RIOptimisticProvider) {
                 rowsetReader = provider.getRowSetReader();
             }
     
    rowsetReader가 행 세트 구현내의 private 인 액세스 가능 필드이다고 하면(자), 어플리케이션이 execute메소드를 호출하면(자), 이 메소드는 리더의 readData메소드를 호출해,RowSet객체에 데이터를 포함합니다.
        
         rowsetReader.readData((RowSetInternal) this);
     

    게다가 어플리케이션은 이 메소드로부터 반환되는 SyncProvider객체를 사용해, 벤더, 버젼, 프로바이더 ID, 동기의 그레이드, 현재 설정되어 있는 락등의 SyncProvider객체에 관한 정보를 돌려주는 메소드를 호출할 수가 있습니다.

    반환값:
    행 세트가 인스턴스화 되었을 때에 설정된 SyncProvider 객체. 또는, 설정되어 있지 않은 경우는 디폴트의 프로바이더
    예외:
    SQLException - SyncProvider 객체를 돌려줄 때 에러가 발생했을 경우
    관련 항목:
    setSyncProvider(java.lang.String)

    setSyncProvider

    void setSyncProvider(String  provider)
                         throws SQLException 
    CachedRowSet 객체의 SyncProvider 객체로 지정한 객체를 설정합니다. 이 메소드로,SyncProvider객체를 리셋 할 수 있습니다.  

    CachedRowSet 구현은 항상 이용 가능한 SyncProvider기구로 인스턴스화할 필요가 있습니다만,SyncProvider객체의 리셋가 바람직한, 또는 필요하게 되는 경우도 있습니다. 예를 들어, 어플리케이션으로, 당분간은 디폴트의 SyncProvider객체를 사용해 두어, 나중에 최근 이용할 수 있게 된, 보다 필요하게 이루어지는 프로바이더를 선택해 사용할 수가 있습니다.  

    SyncProvider 객체를 리셋 하면(자),RowSet객체는 SyncFactory 로부터 새로운 SyncProvider구현을 요구합니다. 이것에 의해, 이전의 모든 접속과 원의 데이터 소스와의 관계를 리셋 해, 미접속의 행 세트의 동기 동작을 큰폭으로 변경할 수가 있습니다.

    파라미터:
    provider - SyncProvider 구현의 완전 수식 클래스명을 지정하는 String 객체
    예외:
    SQLException - SyncProvider 구현의 리셋중에 에러가 발생했을 경우
    관련 항목:
    getSyncProvider()

    size

    int size()
    CachedRowSet 객체내의 행수를 돌려줍니다.

    반환값:
    행 세트내의 행수

    setMetaData

    void setMetaData(RowSetMetaData  md)
                     throws SQLException 
    지정된 RowSetMetaData객체를 사용해,CachedRowSet 객체의 메타데이타를 설정합니다. RowSetReader객체는, 행 세트의 컨텐츠를 읽어낼 때에,RowSetMetaData객체를 생성해,RowSetMetaData구현내의 메소드를 사용해 이것을 초기화합니다. 레퍼런스 구현에서는 RowSetMetaDataImpl클래스를 사용합니다. 리더가 행 세트의 컨텐츠의 읽기를 완료하면(자), 이 메소드가 내부에서 불려 가RowSetMetaData객체가 행 세트에게 건네집니다.

    파라미터:
    md - 이 CachedRowSet객체의 열에 관한 메타데이타를 포함하는 RowSetMetaData 객체
    예외:
    SQLException - 행 세트에 무효인 메타데이타가 제공되었을 경우

    getOriginal

    ResultSet  getOriginal()
                          throws SQLException 
    CachedRowSet 객체의 원의 값을 포함하는 ResultSet 객체를 돌려줍니다.  

    ResultSet 객체의 커서는, 선두행의 전에 둘 필요가 있습니다. 게다가 반환되는 ResultSet객체는 다음의 프로퍼티을 가질 필요가 있습니다.

    • ResultSet.TYPE_SCROLL_INSENSITIVE
    • ResultSet.CONCUR_UPDATABLE

    RowSet객체의 원의 값은, 부하의 데이터 소스와 마지막 동기의 앞에 포함되고 있던 값입니다. 동기가 없었던 경우, 원의 값은,RowSet객체에 포함된 값이 됩니다. 이 메소드는, 어플리케이션이 acceptChanges메소드를 호출해,SyncProvider객체가 경합을 확인하도록(듯이) 구현되고 있는 경우에, 내부에서 불려 갑니다. 이 경우, 라이터는 원의 값과 데이터 소스내의 현재의 값을 비교해, 경합을 확인합니다.

    반환값:
    CachedRowSet 객체의 원의 값을 포함하는 ResultSet 객체
    예외:
    SQLException - ResultSet 객체의 생성시에 에러가 발생했을 경우

    getOriginalRow

    ResultSet  getOriginalRow()
                             throws SQLException 
    CachedRowSet 객체의 현재의 행만의 원의 값을 포함하는 ResultSet 객체를 돌려줍니다.  

    ResultSet 객체의 커서는, 선두행의 전에 둘 필요가 있습니다. 게다가 반환되는 ResultSet객체는 다음의 프로퍼티을 가질 필요가 있습니다.

    • ResultSet.TYPE_SCROLL_INSENSITIVE
    • ResultSet.CONCUR_UPDATABLE

    반환값:
    행의 원의 결과 세트
    예외:
    SQLException - 현재행이 존재하지 않는 경우
    관련 항목:
    setOriginalRow()

    setOriginalRow

    void setOriginalRow()
                        throws SQLException 
    CachedRowSet 객체의 현재의 행을 원의 행으로서 설정합니다.  

    이 메소드는, 현재의 행의 변경된 값이 데이터 소스와 동기 된 뒤에, 내부에서 불려 갑니다. 현재의 행은, 삽입, 삭제, 또는 갱신으로서 태그 붙이고 되어 있어서는 안됩니다.  

    setOriginalRow 의 호출은 취소할 수 없습니다.

    예외:
    SQLException - 현재행이 존재하지 않는 경우, 또는 원의 행의 컨텐츠의 리셋시에 에러가 발생했을 경우
    관련 항목:
    getOriginalRow()

    getTableName

    String  getTableName()
                        throws SQLException 
    CachedRowSet 객체의 작성에 사용된 객체 (테이블)의 식별자를 돌려줍니다. 이 이름은, 반복 설정할 수 있습니다. 이름의 설정 회수나, 표준 구현이 이전의 테이블명을 추적할 필요가 있을지 어떨지에 대해서는, 스펙에 의한 제한은 없습니다.

    반환값:
    CachedRowSet 객체의 데이터의 소스이다 테이블명을 지정하는 String 객체. 또는, 테이블의 이름을 설정하고 있지 않는 경우는 null
    예외:
    SQLException - 테이블명을 돌려줄 때 에러가 발생했을 경우
    관련 항목:
    ResultSetMetaData.getTableName(int)

    setTableName

    void setTableName(String  tabName)
                      throws SQLException 
    CachedRowSet 객체의 파생원의 테이블의 식별자를, 지정의 테이블명으로 설정합니다. 라이터는, 동기시에, 이 이름을 사용해, 데이터 소스의 값과 CachedRowSet객체의 값을 비교할 때에 사용하는 테이블을 판단합니다. 테이블의 식별자는, 이 CachedRowSet객체로부터 변경된 값을 기입하는 장소도 가리킵니다.  

    CachedRowSet 객체의 구현에서는, 내부적으로 RowSetMetaDataImpl객체에 이름을 취득시킬 수가 있습니다.

    파라미터:
    tabName - 이 CachedRowSet객체가 파생했다 테이블을 식별하는 String 객체. null 는 불가, 빈 상태(empty)의 캐릭터 라인은 가능
    예외:
    SQLException - 테이블의 이름부로 에러가 발생했을 경우, 또는 tabNamenull 의 경우
    관련 항목:
    RowSetMetaData.setTableName(int, java.lang.String) , RowSetWriter , SyncProvider

    getKeyColumns

    int[] getKeyColumns()
                        throws SQLException 
    CachedRowSet 객체의 행을 일의에 식별하는 키를 구성하는 열을 나타내는 1개이상의 열번호를 포함하는 배열을 돌려줍니다.

    반환값:
    CachedRowSet 객체의 행의 주키를 구성한다 열을 나타내는 열번호를 포함하는 배열. 주키를 표현하는 열이 없는 경우, 이 배열은 비운다
    예외:
    SQLException - 이 CachedRowSet 객체가 빈 상태(empty)의 경우
    관련 항목:
    setKeyColumns(int[]) , Joinable.getMatchColumnIndexes() , Joinable.getMatchColumnNames()

    setKeyColumns

    void setKeyColumns(int[] keys)
                       throws SQLException 
    CachedRowSet 객체의 keyCols 필드에, 지정된 열번호의 배열 (이 CachedRowSet 객체내의 행을 일의에 식별하는 키를 구성한다)을 설정합니다.  

    CachedRowSet 객체가 JoinRowSet객체에 포함되는 경우, 키열로서 지정된 열이 일치열이 되면, 이 메소드로 정의된 키와 생성된 제약은 보관 유지됩니다.

    파라미터:
    keys - 이 CachedRowSet 객체의 주키를 구성한다 열을 나타내는 int 배열. 배열내의 각 요소는,0 보다 크고, 한편 이 행 세트내의 렬수이하일 필요가 있다
    예외:
    SQLException - 지정된 배열내의 번호가 이 행 세트로 유효하지 않은 경우
    관련 항목:
    getKeyColumns() , Joinable.setMatchColumn(String) , Joinable.setMatchColumn(int)

    createShared

    RowSet  createShared()
                        throws SQLException 
    CachedRowSet 객체와 같은 데이터에 의해, 백업 된 새로운 RowSet 객체를 돌려줍니다. 실제로 양쪽 모두의 CachedRowSet객체는 같은 데이터상에 커서를 가집니다. 그 결과, 원의 객체에 의한 변경이, 그 모든 중복에 가시인 것과 같게, 중복에 의한 모든 변경이, 원의 객체와 그 외의 모든 중복에 가시가 됩니다. 중복으로 부하의 데이터를 변경하는 메소드를 호출하면(자), 그 메소드는, 원의 CachedRowSet객체에 의해 불려 가는 경우와 완전히 똑같이, 등록된 모든 청취자에게 통지합니다.  

    게다가 이 메소드에 의해 작성되는 RowSet 객체는 이 CachedRowSet객체와 같은 프로퍼티을 가집니다. 예를 들어, 이 CachedRowSet객체가 읽어내 전용의 경우, 그 모든 중복도 읽어내 전용이 됩니다. 이것을 갱신 가능하게 변경하면(자), 중복도 갱신 가능하게 됩니다.  

    주:복수의 thread가 createShared() 메소드에 의해 작성된 RowSet객체에 액세스 하는 경우, 공유 데이터의 무결성을 확보하기 위해(때문에), 다음의 동작이 지정됩니다. 모든 공유된 RowSet객체의 읽기와 기입은, 각 객체와 부하의 단일의 겉(표) 구조간에 순서대로 행해질 필요가 있습니다.

    반환값:
    CachedRowSet 객체와 같은 프로퍼티을 가져, 같은 데이터상에 커서를 가진다 새로운 공유 RowSet 객체
    예외:
    SQLException - 에러가 발생했을 경우, 또는 부하의 플랫폼에서 복제가 지원되어 있지 않은 경우
    관련 항목:
    RowSetEvent , RowSetListener

    createCopy

    CachedRowSet  createCopy()
                            throws SQLException 
    CachedRowSet 객체의 데이터의 딥 카피인 RowSet 객체를 작성합니다. createShared호출에 의해 생성된 RowSet객체의 경우와는 달라, 원의 RowSet객체의 카피의 갱신이, 원의 RowSet객체에 가시여 되지 않습니다. 또, 원의 RowSet에 등록된 이벤트 청취자의 스코프에, 새로운 RowSet카피가 포함되어 있어 되지 않습니다. 또, 확립 끝난 제약 제한은 보관 유지되지 않으면 안됩니다.

    반환값:
    새로운 RowSet객체. CachedRowSet 객체의 딥 카피이며, 이 CachedRowSet 객체로부터는 완전하게 독립하고 있다
    예외:
    SQLException - CachedRowSet 객체의 카피의 생성시에 에러가 발생했을 경우
    관련 항목:
    createShared() , createCopySchema() , createCopyNoConstraints() , RowSetEvent , RowSetListener

    createCopySchema

    CachedRowSet  createCopySchema()
                                  throws SQLException 
    CachedRowSet 객체의 빈 상태(empty)의 카피인 CachedRowSet 객체를 작성합니다. 카피에는, 아무것도 포함하지 않고, 원의 CachedRowSet객체의 겉(표) 구조만을 표현할 필요가 있습니다. 게다가 원의 CachedRowSet객체로 설정된 주키 또는 외부 키의 제약을, 새로운 빈 상태(empty)의 CachedRowSet객체에도 동일하게 적용할 필요가 있습니다. createShared메소드 호출에 의해 생성된 RowSet객체와는 달라,createCopySchema메소드에 의한 이 CachedRowSet객체의 카피에의 갱신은 가시으로서는 안됩니다.  

    어플리케이션은, 이 메소드에 의해 반환된 CachedRowSet 객체로부터 WebRowSet객체를 형성해, 나중에 사용하기 위해서,RowSet schema 정의를 XML 에 export 할 수 있습니다.

    예외:
    SQLException - 이 CachedRowSet 객체의 구조의 복제시에 에러가 발생했을 경우
    관련 항목:
    createShared() , createCopySchema() , createCopyNoConstraints() , RowSetEvent , RowSetListener

    createCopyNoConstraints

    CachedRowSet  createCopyNoConstraints()
                                         throws SQLException 
    CachedRowSet 객체의 딥 카피이지만, 독립하고 있는 CachedRowSet 객체를 작성합니다. createShared메소드 호출에 의해 생성된 RowSet객체의 경우와는 달라, 이 CachedRowSet객체의 카피에 대해서 행해진 변경은 가시여 되지 않습니다. 게다가 이 CachedRowSet객체에 의해 등록된 모든 이벤트 청취자의 스코프에 새로운 RowSet객체가 포함되어 있어 되지 않습니다. 또, 이 CachedRowSet객체에 대해서 확립된 제약 제한은 카피에 유지되고 있어 되지 않습니다.

    반환값:
    새로운 CachedRowSet객체. CachedRowSet 객체의 딥 카피이며, 이 CachedRowSet 객체로부터는 완전하게 독립하고 있다
    예외:
    SQLException - CachedRowSet 객체의 카피의 생성시에 에러가 발생했을 경우
    관련 항목:
    createCopy() , createShared() , createCopySchema() , RowSetEvent , RowSetListener

    getRowSetWarnings

    RowSetWarning  getRowSetWarnings()
                                    throws SQLException 
    RowSet 객체에 관한 호출에 의해 보고되는 최초의 경고를 돌려줍니다. 후속의 RowSet객체의 경고는, 이 메소드가 돌려주는 RowSetWarning객체에 체인 됩니다. 경고 체인은, 새로운 행이 읽힐 때마다 자동적으로 클리어 됩니다. 이 메소드는 클로즈 된 RowSet 객체의 호출에는 사용하지 않습니다. 사용하면(자) SQLException 가 throw 됩니다.

    반환값:
    RowSetWarning. 보고된 최초의 RowSetWarning 객체. 없는 경우는 null
    예외:
    SQLException - 이 메소드가, 닫혀진 RowSet 상에서 불려 갔을 경우
    관련 항목:
    RowSetWarning

    getShowDeleted

    boolean getShowDeleted()
                           throws SQLException 
    삭제 마크를 붙일 수 있었던 행을 현재의 행 세트내에 표시할지 어떨지를 나타내는 boolean 를 가져옵니다. true 가 돌려주어졌을 경우, 삭제행은 현재의 행과 함께 표시됩니다. false 가 돌려주어졌을 경우, 삭제행은 현재의 행세트내에 표시되지 않습니다. 디폴트 값는 false 입니다.  

    표준행 세트 구현은, 시큐리티상의 배려 또는 특정의 배치 시나리오에 적합시키기 (위해)때문에, 이 동작을 제한할 수가 있습니다. 이것은, 정의 끝난 구현으로서 남겨져 표준의 동작을 나타내지 않습니다.  

    주:삭제된 행을 표시하면(자), 일부의 표준 JDBC RowSet구현 메소드의 동작이 복잡하게 됩니다. 그러나, 삭제된 행을 표시하는 기능은, 매우 전문적인 어플리케이션으로 밖에 사용되지 않습니다. 따라서, 대부분의 행 세트 사용자는, 이 설정을 무시해 괜찮습니다.

    반환값:
    삭제된 행을 표시하는 경우는 true, 그렇지 않은 경우는 false
    예외:
    SQLException - 행 세트 구현이, 삭제행이 표시될지 어떨지를 판단할 수 없는 경우
    관련 항목:
    setShowDeleted(boolean)

    setShowDeleted

    void setShowDeleted(boolean b)
                        throws SQLException 
    showDeleted 프로퍼티으로서 삭제 마크 첨부의 행을 현재의 행 세트내에 표시할지 어떨지를 지정하는 boolean 를 설정합니다. 값이 true 의 경우, 삭제된 행이 현재의 행 세트와 함께 표시됩니다. 값이 false 의 경우, 삭제된 행은 현재의 행 세트내에 표시되지 않습니다.  

    표준행 세트 구현은, 시큐리티상의 배려 또는 특정의 배치 시나리오에 적합시키기 (위해)때문에, 이 동작을 제한할 수가 있습니다. 이것은, 정의 끝난 구현으로서 남겨져 표준의 동작을 나타내지 않습니다.

    파라미터:
    b - 삭제된 행을 표시하는 경우는 true, 그렇지 않은 경우는 false
    예외:
    SQLException - 행 세트 구현이, 삭제행의 표시 또는 비표시의 설정을 리셋 할 수 없는 경우
    관련 항목:
    getShowDeleted()

    commit

    void commit()
                throws SQLException 
    CachedRowSet 객체의 SyncProvider 에는,ResultSetConnection 객체인가, 생성자 에게 건네지는 JDBC 프로퍼티이 포함됩니다. 이 메소드는,Connection 위탁 메소드를 랩 해, 유연한 자동 위탁 또는 비자동 위탁의 트랜잭션(transaction) 제어 지원를 제공합니다.  

    전회의 위탁/롤백(rollback)의 뒤,acceptChanges()메소드에 의해 행해진 모든 변경을 영속적인 것으로 합니다. 이 메소드는 자동 위탁 모드가 무효가 되어 있을 때 밖에 사용할 수 없습니다.

    예외:
    SQLException - 데이타베이스 액세스 에러가 발생했을 경우, 또는 이 CachedRowSet 내의 Connection 객체가 자동 위탁 모드인 경우
    관련 항목:
    Connection.setAutoCommit(boolean)

    rollback

    void rollback()
                  throws SQLException 
    CachedRowSet 객체의 SyncProvider 에는, 원의 ResultSetConnection 객체인가, 거기에 건네받는 JDBC 프로퍼티이 포함됩니다.  

    현재의 트랜잭션(transaction)에서의 모든 변경을 취소합니다. 이 메소드는 자동 위탁 모드가 무효가 되어 있을 때 밖에 사용할 수 없습니다.

    예외:
    SQLException - 데이타베이스 액세스 에러가 발생했을 경우, 또는 이 CachedRowSet 내의 Connection 객체가 자동 위탁 모드인 경우

    rollback

    void rollback(Savepoint  s)
                  throws SQLException 
    CachedRowSet 객체의 SyncProvider 에는, 원의 ResultSetConnection 객체인가, 거기에 건네받는 JDBC 프로퍼티이 포함됩니다.  

    현재의 트랜잭션(transaction)에서의 모든 변경을 취소해, 마지막 Savepoint트랜잭션(transaction) 마커에 되돌립니다. 이 메소드는 자동 위탁 모드가 무효가 되어 있을 때 밖에 사용할 수 없습니다.

    파라미터:
    s - Savepoint트랜잭션(transaction) 마커
    예외:
    SQLException - 데이타베이스 액세스 에러가 발생했을 경우, 또는 이 CachedRowSet 내의 Connection 객체가 자동 위탁 모드인 경우

    rowSetPopulated

    void rowSetPopulated(RowSetEvent  event,
                         int numRows)
                         throws SQLException 
    등록이 끝난 청취자에게, 지정된 RowSetEvent 객체내의 RowSet 객체가 다수의 추가행을 읽어들인 것을 통지합니다. numRows파라미터에 의해, 이 이벤트는,numRow마다 트리거됩니다.  

    이벤트의 소스는 event.getSource 메소드로 취득할 수 있습니다.

    파라미터:
    event - 이벤트의 소스인 RowSet 객체를 포함하는 RowSetEvent 객체
    numRows - read시의 행의 간격수. 여기서, 읽힌 CachedRowSet 가 트리거된다. 디폴트 값는 제로. fetchSize 보다 작은 값과 제로보다 작은 값은 지정할 수 없다
    예외:
    SQLException

    populate

    void populate(ResultSet  rs,
                  int startRow)
                  throws SQLException 
    CachedRowSet 객체로 지정된 ResultSet객체의 데이터를 읽어들입니다. populate(ResultSet)메소드에 관련지을 수 있고 있는 경우, 추가 파라미터에 의해, CashedRowSet 인스턴스의 read를 개시하는 ResultSet내의 개시 위치를 지정할 수가 있습니다.  

    이 메소드는, 어플리케이션이 오픈하고 있는 ResultSet 객체에 접속하고 있을 때 execute 메소드의 대체로서 사용할 수 있습니다. 새로운 접속을 열어 이 CachedRowSet객체의 커멘드를 재실행할 필요가 없는 점으로써,populate 메소드는, 파라미터를 취하지 않는 execute메소드보다 효율적입니다. 또,populate 메소드를 사용하는 것은,ResultSet객체를 취하는 execute 메소드보다 편리합니다.

    파라미터:
    startRow - 이 CachedRowSet 에의 레코드의 read를 개시하는, ResultSet 내의 위치
    rs - 이 CachedRowSet 객체에 읽힌다 데이터를 포함한 ResultSet 객체
    예외:
    SQLException - null 의 ResultSet 객체가 제공되었을 경우, 또는 이 CachedRowSet 객체가 관련하는 ResultSetMetaData 객체를 취득할 수 없는 경우
    관련 항목:
    execute(java.sql.Connection) , populate(ResultSet) , ResultSet , ResultSetMetaData

    setPageSize

    void setPageSize(int size)
                     throws SQLException 
    CachedRowSet 객체의 페이지 사이즈를 설정합니다. CachedRowSet는, 자신을 페이지 사이즈로 설정된 행수의 행에 읽어들이는 설정으로 할 수 있습니다. populate()또는 execute()가 불려 가면(자),CachedRowSet는, RowSet 의 read 사용한 원의 SQL 쿼리에 따라, 추가 페이지를 페치 합니다.

    파라미터:
    size - CachedRowSet의 페이지 사이즈
    예외:
    SQLException - CachedRowSet 페이지 사이즈의 설정시에 에러가 발생했을 경우, 또는 페이지 사이즈가 제로보다 작은 경우

    getPageSize

    int getPageSize()
    CachedRowSet 객체의 페이지 사이즈를 돌려줍니다.

    반환값:
    페이지 사이즈를 나타내는 int

    nextPage

    boolean nextPage()
                     throws SQLException 
    CachedRowSet 의 현재의 페이지를 증분 합니다. 이것에 의해,CachedRowSet구현은, 다음의 페이지 사이즈 분의행을 페치 해, RowSet 에 읽어들입니다. 다만, 이 때문에는, 그 외의 행이 RowSet의 read에 사용된 원의 SQL 쿼리의 스코프내에 남아 있지 않으면 안됩니다.

    반환값:
    아직 페이지가 있는 경우는 true, 이것이 마지막 페이지인 경우는 false
    예외:
    SQLException - 다음의 페이지의 페치시에 에러가 발생했을 경우, 또는 이 메소드가 populate 나 execute 의 실행전에 너무 빨리 불려 갔을 경우

    previousPage

    boolean previousPage()
                         throws SQLException 
    CachedRowSet 의 현재의 페이지를 감 분 합니다. 이것에 의해,CachedRowSet구현은, 이전의 페이지 사이즈 분의행을 페치 해, RowSet 에 읽어들입니다. 이전의 페이지내가 반환된 행의 양은, RowSet의 read에 사용된 원의 SQL 쿼리의 스코프내에 남아 있을 필요가 있습니다.

    반환값:
    전의 페이지가 정상적으로 취득되었을 경우는 true, 이것이 최초의 페이지인 경우는 false
    예외:
    SQLException - 이전의 페이지의 페치시에 에러가 발생했을 경우, 또는 이 메소드가 populate 나 execute 의 실행전에 너무 빨리 불려 갔을 경우

    JavaTM Platform
    Standard Ed. 6

    버그의 보고와 기능의 요청
    한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

    Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.