DEVFYI - Developer Resource - FYI

How can I instantiate and load a new CachedRowSet object from a non-JDBC source?

JDBC Interview Questions and Answers


(Continued from previous question...)

How can I instantiate and load a new CachedRowSet object from a non-JDBC source?

The basics are:
* Create an object that implements javax.sql.RowSetReader, which loads the data.
* Instantiate a CachedRowset object.
* Set the CachedRowset's reader to the reader object previously created.
* Invoke CachedRowset.execute().

Note that a RowSetMetaData object must be created, set up with a description of the data, and attached to the CachedRowset before loading the actual data.
The following code works with the Early Access JDBC RowSet download available from the Java Developer Connection and is an expansion of one of the examples:

// Independent data source CachedRowSet Example
import java.sql.*;
import javax.sql.*;
import sun.jdbc.rowset.*;


public class RowSetEx1 implements RowSetReader
{
  CachedRowSet crs;
  int iCol2;
  RowSetMetaDataImpl rsmdi;
  String sCol1, 
         sCol3;

      
  public RowSetEx1()
  {
    try 
    {
      crs = new CachedRowSet();
      crs.setReader(this);
      crs.execute();  // load from reader

      System.out.println(
        "Fetching from RowSet...");
      while(crs.next()) 
      {
        showTheData();
      } // end while next
            
      if(crs.isAfterLast() == true) 
      {
        System.out.println(
          "We have reached the end");
        System.out.println("crs row: " + 
                            crs.getRow());
      }
            
      System.out.println(
        "And now backwards...");
            
      while(crs.previous()) 
      {
        showTheData();
      }  // end while previous
            
      if(crs.isBeforeFirst() == true) 
      { System.out.println(
          "We have reached the start"); 
      }
            
      crs.first();
      if(crs.isFirst() == true)
      { System.out.println(
          "We have moved to first"); 
      }

      System.out.println("crs row: " + 
                          crs.getRow());

      if(crs.isBeforeFirst() == false)
      { System.out.println(
          "We aren't before the first row."); }

      crs.last();
      if(crs.isLast() == true)
      { System.out.println(
          "...and now we have moved to the last"); 
      }

      System.out.println("crs row: " + 
                          crs.getRow());

      if(crs.isAfterLast() == false)
      {
        System.out.println(
          "we aren't after the last.");
      }

    } // end try
    catch (SQLException ex) 
    {
      System.err.println("SQLException: " + 
         ex.getMessage());
    }
                  
  }  // end constructor



  public void showTheData() throws SQLException
  {
    sCol1 = crs.getString(1);
    if(crs.wasNull() == false) 
    { System.out.println("sCol1: " + sCol1); } 
    else { System.out.println("sCol1 is null"); }
                
    iCol2 = crs.getInt(2);
    if (crs.wasNull() == false) 
    { System.out.println("iCol2: " + iCol2); } 
    else { System.out.println("iCol2 is null"); }    

    sCol3 = crs.getString(3);
    if (crs.wasNull() == false) 
    { 
      System.out.println("sCol3: " + 
                          sCol3    + "\n" ); 
    } 
    else 
    { System.out.println("sCol3 is null\n"); }

  }  // end showTheData



  // RowSetReader implementation
  public void readData(RowSetInternal caller) 
                 throws SQLException
  {
      rsmdi = new RowSetMetaDataImpl();
      rsmdi.setColumnCount(3);
      rsmdi.setColumnType(1, Types.VARCHAR);
      rsmdi.setColumnType(2, Types.INTEGER);
      rsmdi.setColumnType(3, Types.VARCHAR);
      crs.setMetaData( rsmdi );
           
      crs.moveToInsertRow();
      
      crs.updateString( 1, "StringCol11" );
      crs.updateInt( 2, 1 );
      crs.updateString( 3, "StringCol31" );
      crs.insertRow();

      crs.updateString( 1, "StringCol12" );
      crs.updateInt( 2, 2 );
      crs.updateString( 3, "StringCol32" );
      crs.insertRow();

      crs.moveToCurrentRow();
      crs.beforeFirst();

  } // end readData
    


  public static void main(String args[])
  {
    new RowSetEx1();
  }

} // end class RowSetEx1

(Continued on next question...)

Other Interview Questions