<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDatabase_SQL_JDBC%2FRowSet</id>
		<title>Java/Database SQL JDBC/RowSet - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDatabase_SQL_JDBC%2FRowSet"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Database_SQL_JDBC/RowSet&amp;action=history"/>
		<updated>2026-04-21T13:29:50Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Database_SQL_JDBC/RowSet&amp;diff=6929&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Database_SQL_JDBC/RowSet&amp;diff=6929&amp;oldid=prev"/>
				<updated>2010-06-01T06:34:12Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:34, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Database_SQL_JDBC/RowSet&amp;diff=6928&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Database_SQL_JDBC/RowSet&amp;diff=6928&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Register RowSet Listener ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DriverManager;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
import javax.sql.RowSetEvent;&lt;br /&gt;
import javax.sql.RowSetListener;&lt;br /&gt;
import javax.sql.rowset.JdbcRowSet;&lt;br /&gt;
import com.sun.rowset.JdbcRowSetImpl;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    Connection conn = getHSQLConnection();&lt;br /&gt;
    System.out.println(&amp;quot;Got Connection.&amp;quot;);&lt;br /&gt;
    Statement st = conn.createStatement();&lt;br /&gt;
    st.executeUpdate(&amp;quot;create table survey (id int,name varchar);&amp;quot;);&lt;br /&gt;
    st.executeUpdate(&amp;quot;insert into survey (id,name ) values (1,&amp;quot;nameValue&amp;quot;)&amp;quot;);&lt;br /&gt;
    st.executeUpdate(&amp;quot;insert into survey (id,name ) values (2,&amp;quot;anotherValue&amp;quot;)&amp;quot;);    &lt;br /&gt;
    &lt;br /&gt;
    JdbcRowSet jdbcRS;&lt;br /&gt;
    jdbcRS = new JdbcRowSetImpl(conn);&lt;br /&gt;
    jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);&lt;br /&gt;
    String sql = &amp;quot;SELECT * FROM survey&amp;quot;;&lt;br /&gt;
    jdbcRS.setCommand(sql);&lt;br /&gt;
    jdbcRS.execute();&lt;br /&gt;
    jdbcRS.addRowSetListener(new ExampleListener());&lt;br /&gt;
    while (jdbcRS.next()) {&lt;br /&gt;
      // each call to next, generates a cursorMoved event&lt;br /&gt;
      System.out.println(&amp;quot;id=&amp;quot; + jdbcRS.getString(1));&lt;br /&gt;
      System.out.println(&amp;quot;name=&amp;quot; + jdbcRS.getString(2));&lt;br /&gt;
    }&lt;br /&gt;
    conn.close();&lt;br /&gt;
  }&lt;br /&gt;
  private static Connection getHSQLConnection() throws Exception {&lt;br /&gt;
    Class.forName(&amp;quot;org.hsqldb.jdbcDriver&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;Driver Loaded.&amp;quot;);&lt;br /&gt;
    String url = &amp;quot;jdbc:hsqldb:data/tutorial&amp;quot;;&lt;br /&gt;
    return DriverManager.getConnection(url, &amp;quot;sa&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getMySqlConnection() throws Exception {&lt;br /&gt;
    String driver = &amp;quot;org.gjt.mm.mysql.Driver&amp;quot;;&lt;br /&gt;
    String url = &amp;quot;jdbc:mysql://localhost/demo2s&amp;quot;;&lt;br /&gt;
    String username = &amp;quot;oost&amp;quot;;&lt;br /&gt;
    String password = &amp;quot;oost&amp;quot;;&lt;br /&gt;
    Class.forName(driver);&lt;br /&gt;
    Connection conn = DriverManager.getConnection(url, username, password);&lt;br /&gt;
    return conn;&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getOracleConnection() throws Exception {&lt;br /&gt;
    String driver = &amp;quot;oracle.jdbc.driver.OracleDriver&amp;quot;;&lt;br /&gt;
    String url = &amp;quot;jdbc:oracle:thin:@localhost:1521:databaseName&amp;quot;;&lt;br /&gt;
    String username = &amp;quot;userName&amp;quot;;&lt;br /&gt;
    String password = &amp;quot;password&amp;quot;;&lt;br /&gt;
    Class.forName(driver); // load Oracle driver&lt;br /&gt;
    Connection conn = DriverManager.getConnection(url, username, password);&lt;br /&gt;
    return conn;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ExampleListener implements RowSetListener {&lt;br /&gt;
  public void cursorMoved(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of cursorMoved event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
  public void rowChanged(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of rowChanged event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
  public void rowSetChanged(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of rowSetChanged event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RowSetSync Provider ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
JDBC Recipes: A Problem-Solution Approach (Problem-Solution Approach) (Hardcover)&lt;br /&gt;
by Mahmoud Parsian &lt;br /&gt;
&lt;br /&gt;
# Publisher: Apress (September 15, 2005)&lt;br /&gt;
# Language: English&lt;br /&gt;
# ISBN: 1590595203&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.sql.Types;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.sql.RowSet;&lt;br /&gt;
import javax.sql.RowSetInternal;&lt;br /&gt;
import javax.sql.RowSetMetaData;&lt;br /&gt;
import javax.sql.RowSetReader;&lt;br /&gt;
import javax.sql.RowSetWriter;&lt;br /&gt;
import javax.sql.rowset.CachedRowSet;&lt;br /&gt;
import javax.sql.rowset.RowSetMetaDataImpl;&lt;br /&gt;
import javax.sql.rowset.spi.SyncFactory;&lt;br /&gt;
import javax.sql.rowset.spi.SyncProvider;&lt;br /&gt;
import com.sun.rowset.CachedRowSetImpl;&lt;br /&gt;
public class Main {&lt;br /&gt;
  CachedRowSet crs;&lt;br /&gt;
  String stringColumn1;&lt;br /&gt;
  String stringColumn3;&lt;br /&gt;
  int intColumn2;&lt;br /&gt;
  public Main() {&lt;br /&gt;
    try {&lt;br /&gt;
      SyncFactory.registerProvider(&amp;quot;MySyncProvider&amp;quot;);&lt;br /&gt;
      Hashtable env = new Hashtable();&lt;br /&gt;
      env.put(SyncFactory.ROWSET_SYNC_PROVIDER, &amp;quot;MySyncProvider&amp;quot;);&lt;br /&gt;
      crs = new CachedRowSetImpl(env);&lt;br /&gt;
      crs.execute(); // load data from custom RowSetReader&lt;br /&gt;
      System.out.println(&amp;quot;Fetching from RowSet...&amp;quot;);&lt;br /&gt;
      while (crs.next()) {&lt;br /&gt;
        displayData();&lt;br /&gt;
      }&lt;br /&gt;
      if (crs.isAfterLast() == true) {&lt;br /&gt;
        System.out.println(&amp;quot;We have reached the end&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;crs row: &amp;quot; + crs.getRow());&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;And now backwards...&amp;quot;);&lt;br /&gt;
      while (crs.previous()) {&lt;br /&gt;
        displayData();&lt;br /&gt;
      } // end while previous&lt;br /&gt;
      if (crs.isBeforeFirst()) {&lt;br /&gt;
        System.out.println(&amp;quot;We have reached the start&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      crs.first();&lt;br /&gt;
      if (crs.isFirst()) {&lt;br /&gt;
        System.out.println(&amp;quot;We have moved to first&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;crs row: &amp;quot; + crs.getRow());&lt;br /&gt;
      if (!crs.isBeforeFirst()) {&lt;br /&gt;
        System.out.println(&amp;quot;We aren&amp;quot;t before the first row.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      crs.last();&lt;br /&gt;
      if (crs.isLast()) {&lt;br /&gt;
        System.out.println(&amp;quot;...and now we have moved to the last&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;crs row: &amp;quot; + crs.getRow());&lt;br /&gt;
      if (!crs.isAfterLast()) {&lt;br /&gt;
        System.out.println(&amp;quot;we aren&amp;quot;t after the last.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } catch (SQLException e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
      System.err.println(&amp;quot;SQLException: &amp;quot; + e.getMessage());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void displayData() throws SQLException {&lt;br /&gt;
    stringColumn1 = crs.getString(1);&lt;br /&gt;
    if (crs.wasNull()) {&lt;br /&gt;
      System.out.println(&amp;quot;stringColumn1 is null&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;stringColumn1: &amp;quot; + stringColumn1);&lt;br /&gt;
    }&lt;br /&gt;
    intColumn2 = crs.getInt(2);&lt;br /&gt;
    if (crs.wasNull()) {&lt;br /&gt;
      System.out.println(&amp;quot;intColumn2 is null&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;intColumn2: &amp;quot; + intColumn2);&lt;br /&gt;
    }&lt;br /&gt;
    stringColumn3 = crs.getString(3);&lt;br /&gt;
    if (crs.wasNull()) {&lt;br /&gt;
      System.out.println(&amp;quot;stringColumn3 is null&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;stringColumn3: &amp;quot; + stringColumn3);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] a){&lt;br /&gt;
    new Main();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.sql.Types;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.sql.RowSet;&lt;br /&gt;
import javax.sql.RowSetInternal;&lt;br /&gt;
import javax.sql.RowSetMetaData;&lt;br /&gt;
import javax.sql.RowSetReader;&lt;br /&gt;
import javax.sql.RowSetWriter;&lt;br /&gt;
import javax.sql.rowset.CachedRowSet;&lt;br /&gt;
import javax.sql.rowset.RowSetMetaDataImpl;&lt;br /&gt;
import javax.sql.rowset.spi.SyncFactory;&lt;br /&gt;
import javax.sql.rowset.spi.SyncProvider;&lt;br /&gt;
import com.sun.rowset.CachedRowSetImpl;&lt;br /&gt;
public class CustomRowSetReader implements RowSetReader {&lt;br /&gt;
  public CustomRowSetReader() {&lt;br /&gt;
  }&lt;br /&gt;
  public void readData(RowSetInternal caller) throws SQLException {&lt;br /&gt;
    System.out.println(&amp;quot;--- CustomRowSetReader: begin. ---&amp;quot;);&lt;br /&gt;
    if (caller == null) {&lt;br /&gt;
      System.out.println(&amp;quot;CustomRowSetReader: caller is null.&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    CachedRowSet crs = (CachedRowSet) caller;&lt;br /&gt;
    // CachedRowSet crs = (CachedRowSet) caller.getOriginal();&lt;br /&gt;
    RowSetMetaData rsmd = new RowSetMetaDataImpl();&lt;br /&gt;
    rsmd.setColumnCount(3);&lt;br /&gt;
    rsmd.setColumnType(1, Types.VARCHAR);&lt;br /&gt;
    rsmd.setColumnType(2, Types.INTEGER);&lt;br /&gt;
    rsmd.setColumnType(3, Types.VARCHAR);&lt;br /&gt;
    rsmd.setColumnName(1, &amp;quot;col1&amp;quot;);&lt;br /&gt;
    rsmd.setColumnName(2, &amp;quot;col2&amp;quot;);&lt;br /&gt;
    rsmd.setColumnName(3, &amp;quot;col3&amp;quot;);&lt;br /&gt;
    crs.setMetaData(rsmd);&lt;br /&gt;
    System.out.println(&amp;quot;CustomRowSetReader: crs.setMetaData( rsmd );&amp;quot;);&lt;br /&gt;
    crs.moveToInsertRow();&lt;br /&gt;
    crs.updateString(1, &amp;quot;StringCol11&amp;quot;);&lt;br /&gt;
    crs.updateInt(2, 1);&lt;br /&gt;
    crs.updateString(3, &amp;quot;StringCol31&amp;quot;);&lt;br /&gt;
    crs.insertRow();&lt;br /&gt;
    System.out.println(&amp;quot;CustomRowSetReader: crs.insertRow() 1&amp;quot;);&lt;br /&gt;
    crs.updateString(1, &amp;quot;StringCol12&amp;quot;);&lt;br /&gt;
    crs.updateInt(2, 2);&lt;br /&gt;
    crs.updateString(3, &amp;quot;StringCol32&amp;quot;);&lt;br /&gt;
    crs.insertRow();&lt;br /&gt;
    System.out.println(&amp;quot;CustomRowSetReader: crs.insertRow() 2&amp;quot;);&lt;br /&gt;
    crs.moveToCurrentRow();&lt;br /&gt;
    crs.beforeFirst();&lt;br /&gt;
    displayRowSet(crs);&lt;br /&gt;
    crs.beforeFirst();&lt;br /&gt;
    // crs.acceptChanges();&lt;br /&gt;
    System.out.println(&amp;quot;CustomRowSetReader: end.&amp;quot;);&lt;br /&gt;
  } // end readData&lt;br /&gt;
  static void displayRowSet(RowSet rs) throws SQLException {&lt;br /&gt;
    while (rs.next()) {&lt;br /&gt;
      System.out.println(rs.getRow() + &amp;quot; - &amp;quot; + rs.getString(&amp;quot;col1&amp;quot;) + &amp;quot;:&amp;quot; + rs.getInt(&amp;quot;col2&amp;quot;) + &amp;quot;:&amp;quot;&lt;br /&gt;
          + rs.getString(&amp;quot;col3&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.sql.Types;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.sql.RowSet;&lt;br /&gt;
import javax.sql.RowSetInternal;&lt;br /&gt;
import javax.sql.RowSetMetaData;&lt;br /&gt;
import javax.sql.RowSetReader;&lt;br /&gt;
import javax.sql.RowSetWriter;&lt;br /&gt;
import javax.sql.rowset.CachedRowSet;&lt;br /&gt;
import javax.sql.rowset.RowSetMetaDataImpl;&lt;br /&gt;
import javax.sql.rowset.spi.SyncFactory;&lt;br /&gt;
import javax.sql.rowset.spi.SyncProvider;&lt;br /&gt;
import com.sun.rowset.CachedRowSetImpl;&lt;br /&gt;
&lt;br /&gt;
class CustomRowSetWriter implements RowSetWriter {&lt;br /&gt;
  public CustomRowSetWriter() {&lt;br /&gt;
    System.out.println(&amp;quot;CustomRowSetWriter: constructor.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public boolean writeData(RowSetInternal caller) throws SQLException {&lt;br /&gt;
    System.out.println(&amp;quot;--- CustomRowSetWriter: begin. ---&amp;quot;);&lt;br /&gt;
    if (caller == null) {&lt;br /&gt;
      System.out.println(&amp;quot;CustomRowSetWriter: caller is null.&amp;quot;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    CachedRowSet crs = (CachedRowSet) caller;&lt;br /&gt;
    // for now do not write any data&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import javax.sql.RowSet;&lt;br /&gt;
import javax.sql.RowSetInternal;&lt;br /&gt;
import javax.sql.RowSetMetaData;&lt;br /&gt;
import javax.sql.RowSetReader;&lt;br /&gt;
import javax.sql.RowSetWriter;&lt;br /&gt;
import javax.sql.rowset.CachedRowSet;&lt;br /&gt;
import javax.sql.rowset.RowSetMetaDataImpl;&lt;br /&gt;
import javax.sql.rowset.spi.SyncFactory;&lt;br /&gt;
import javax.sql.rowset.spi.SyncProvider;&lt;br /&gt;
import com.sun.rowset.CachedRowSetImpl;&lt;br /&gt;
import javax.sql.rowset.spi.SyncProvider;&lt;br /&gt;
public class MySyncProvider extends SyncProvider {&lt;br /&gt;
  private int dataSourceLock;&lt;br /&gt;
  /**&lt;br /&gt;
   * creates a default SyncProvider object.&lt;br /&gt;
   */&lt;br /&gt;
  public MySyncProvider() {&lt;br /&gt;
    System.out.println(&amp;quot;MySyncProvider: constructor.&amp;quot;);&lt;br /&gt;
    this.dataSourceLock = SyncProvider.DATASOURCE_NO_LOCK;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the current data source lock severity level active in this&lt;br /&gt;
   * SyncProvider implementation.&lt;br /&gt;
   */&lt;br /&gt;
  public int getDataSourceLock() {&lt;br /&gt;
    return this.dataSourceLock;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns a constant indicating the grade of synchronization a RowSet object&lt;br /&gt;
   * can expect from this SyncProvider object.&lt;br /&gt;
   */&lt;br /&gt;
  public int getProviderGrade() {&lt;br /&gt;
    return SyncProvider.GRADE_NONE;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the unique identifier for this SyncProvider object.&lt;br /&gt;
   */&lt;br /&gt;
  public String getProviderID() {&lt;br /&gt;
    String id = getClass().getName();&lt;br /&gt;
    System.out.println(&amp;quot;--- MySyncProvider: getProviderID() =&amp;quot; + id);&lt;br /&gt;
    return id; // &amp;quot;MySyncProvider&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns a javax.sql.RowSetReader object, which can be used to populate a&lt;br /&gt;
   * RowSet object with data.&lt;br /&gt;
   */&lt;br /&gt;
  public RowSetReader getRowSetReader() {&lt;br /&gt;
    System.out.println(&amp;quot;--- MySyncProvider: getRowSetReader() ---&amp;quot;);&lt;br /&gt;
    return new CustomRowSetReader();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns a javax.sql.RowSetWriter object, which can be used to write a&lt;br /&gt;
   * RowSet object&amp;quot;s data back to the underlying data source.&lt;br /&gt;
   */&lt;br /&gt;
  public RowSetWriter getRowSetWriter() {&lt;br /&gt;
    System.out.println(&amp;quot;--- MySyncProvider: getRowSetWriter() ---&amp;quot;);&lt;br /&gt;
    return new CustomRowSetWriter();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the vendor name of this SyncProvider instance&lt;br /&gt;
   */&lt;br /&gt;
  public String getVendor() {&lt;br /&gt;
    return &amp;quot;custom-made&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the release version of this SyncProvider instance.&lt;br /&gt;
   */&lt;br /&gt;
  public String getVersion() {&lt;br /&gt;
    return &amp;quot;1.0&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets a lock on the underlying data source at the level indicated by&lt;br /&gt;
   * datasourceLock.&lt;br /&gt;
   */&lt;br /&gt;
  public void setDataSourceLock(int dataSourceLock) {&lt;br /&gt;
    this.dataSourceLock = dataSourceLock;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns whether this SyncProvider implementation can perform&lt;br /&gt;
   * synchronization between a RowSet object and the SQL VIEW in the data source&lt;br /&gt;
   * from which the RowSet object got its data.&lt;br /&gt;
   */&lt;br /&gt;
  public int supportsUpdatableView() {&lt;br /&gt;
    return SyncProvider.NONUPDATABLE_VIEW_SYNC;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Jdbc RowSet Event ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DriverManager;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
import javax.sql.RowSetEvent;&lt;br /&gt;
import javax.sql.RowSetListener;&lt;br /&gt;
import javax.sql.rowset.JdbcRowSet;&lt;br /&gt;
import com.sun.rowset.JdbcRowSetImpl;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    Connection conn = getHSQLConnection();&lt;br /&gt;
    System.out.println(&amp;quot;Got Connection.&amp;quot;);&lt;br /&gt;
    Statement st = conn.createStatement();&lt;br /&gt;
    st.executeUpdate(&amp;quot;create table survey (id int,name varchar);&amp;quot;);&lt;br /&gt;
    st.executeUpdate(&amp;quot;insert into survey (id,name ) values (1,&amp;quot;nameValue&amp;quot;)&amp;quot;);&lt;br /&gt;
    st.executeUpdate(&amp;quot;insert into survey (id,name ) values (2,&amp;quot;anotherValue&amp;quot;)&amp;quot;);    &lt;br /&gt;
    &lt;br /&gt;
    JdbcRowSet jdbcRS;&lt;br /&gt;
    jdbcRS = new JdbcRowSetImpl(conn);&lt;br /&gt;
    jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);&lt;br /&gt;
    String sql = &amp;quot;SELECT * FROM survey&amp;quot;;&lt;br /&gt;
    jdbcRS.setCommand(sql);&lt;br /&gt;
    jdbcRS.execute();&lt;br /&gt;
    jdbcRS.addRowSetListener(new ExampleListener());&lt;br /&gt;
    while (jdbcRS.next()) {&lt;br /&gt;
      // each call to next, generates a cursorMoved event&lt;br /&gt;
      System.out.println(&amp;quot;id=&amp;quot; + jdbcRS.getString(1));&lt;br /&gt;
      System.out.println(&amp;quot;name=&amp;quot; + jdbcRS.getString(2));&lt;br /&gt;
    }&lt;br /&gt;
    conn.close();&lt;br /&gt;
  }&lt;br /&gt;
  private static Connection getHSQLConnection() throws Exception {&lt;br /&gt;
    Class.forName(&amp;quot;org.hsqldb.jdbcDriver&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;Driver Loaded.&amp;quot;);&lt;br /&gt;
    String url = &amp;quot;jdbc:hsqldb:data/tutorial&amp;quot;;&lt;br /&gt;
    return DriverManager.getConnection(url, &amp;quot;sa&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getMySqlConnection() throws Exception {&lt;br /&gt;
    String driver = &amp;quot;org.gjt.mm.mysql.Driver&amp;quot;;&lt;br /&gt;
    String url = &amp;quot;jdbc:mysql://localhost/demo2s&amp;quot;;&lt;br /&gt;
    String username = &amp;quot;oost&amp;quot;;&lt;br /&gt;
    String password = &amp;quot;oost&amp;quot;;&lt;br /&gt;
    Class.forName(driver);&lt;br /&gt;
    Connection conn = DriverManager.getConnection(url, username, password);&lt;br /&gt;
    return conn;&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getOracleConnection() throws Exception {&lt;br /&gt;
    String driver = &amp;quot;oracle.jdbc.driver.OracleDriver&amp;quot;;&lt;br /&gt;
    String url = &amp;quot;jdbc:oracle:thin:@localhost:1521:databaseName&amp;quot;;&lt;br /&gt;
    String username = &amp;quot;userName&amp;quot;;&lt;br /&gt;
    String password = &amp;quot;password&amp;quot;;&lt;br /&gt;
    Class.forName(driver); // load Oracle driver&lt;br /&gt;
    Connection conn = DriverManager.getConnection(url, username, password);&lt;br /&gt;
    return conn;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ExampleListener implements RowSetListener {&lt;br /&gt;
  public void cursorMoved(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of cursorMoved event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
  public void rowChanged(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of rowChanged event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
  public void rowSetChanged(RowSetEvent event) {&lt;br /&gt;
    System.out.println(&amp;quot;ExampleListener notified of rowSetChanged event&amp;quot;);&lt;br /&gt;
    System.out.println(event.toString());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>