-
- All Superinterfaces:
AutoCloseable
,CachedRowSet
,Joinable
,ResultSet
,RowSet
,Wrapper
- All Known Subinterfaces:
FilteredRowSet
,JoinRowSet
public interface WebRowSet extends CachedRowSet
The standard interface that all implementations of aWebRowSet
must implement.1.0 Overview
TheWebRowSetImpl
provides the standard reference implementation, which may be extended if required.The standard WebRowSet XML Schema definition is available at the following URI:
It describes the standard XML document format required when describing aRowSet
object in XML and must be used be all standard implementations of theWebRowSet
interface to ensure interoperability. In addition, theWebRowSet
schema uses specific SQL/XML Schema annotations, thus ensuring greater cross platform interoperability. This is an effort currently under way at the ISO organization. The SQL/XML definition is available at the following URI: The schema definition describes the internal data of aRowSet
object in three distinct areas:- properties - These properties describe the standard synchronization
provider properties in addition to the more general
RowSet
properties. - metadata - This describes the metadata associated with the tabular structure governed by a
WebRowSet
object. The metadata described is closely aligned with the metadata accessible in the underlyingjava.sql.ResultSet
interface. - data - This describes the original data (the state of data since the
last population
or last synchronization of the
WebRowSet
object) and the current data. By keeping track of the delta between the original data and the current data, aWebRowSet
maintains the ability to synchronize changes in its data back to the originating data source.
2.0 WebRowSet States
The following sections demonstrates how aWebRowSet
implementation should use the XML Schema to describe update, insert, and delete operations and to describe the state of aWebRowSet
object in XML.2.1 State 1 - Outputting a
In this example, aWebRowSet
Object to XMLWebRowSet
object is created and populated with a simple 2 column, 5 row table from a data source. Having the 5 rows in aWebRowSet
object makes it possible to describe them in XML. The metadata describing the various standard JavaBeans properties as defined in the RowSet interface plus the standard properties defined in theCachedRowSet
™ interface provide key details that describe WebRowSet properties. Outputting the WebRowSet object to XML using the standardwriteXml
methods describes the internal properties as follows:<properties> <command>select co1, col2 from test_table</command> <concurrency>1</concurrency> <datasource/> <escape-processing>true</escape-processing> <fetch-direction>0</fetch-direction> <fetch-size>0</fetch-size> <isolation-level>1</isolation-level> <key-columns/> <map/> <max-field-size>0</max-field-size> <max-rows>0</max-rows> <query-timeout>0</query-timeout> <read-only>false</read-only> <rowset-type>TRANSACTION_READ_UNCOMMITTED</rowset-type> <show-deleted>false</show-deleted> <table-name/> <url>jdbc:thin:oracle</url> <sync-provider> <sync-provider-name>.com.rowset.provider.RIOptimisticProvider</sync-provider-name> <sync-provider-vendor>Oracle Corporation</sync-provider-vendor> <sync-provider-version>1.0</sync-provider-name> <sync-provider-grade>LOW</sync-provider-grade> <data-source-lock>NONE</data-source-lock> </sync-provider> </properties>
column-definition
tags.<metadata> <column-count>2</column-count> <column-definition> <column-index>1</column-index> <auto-increment>false</auto-increment> <case-sensitive>true</case-sensitive> <currency>false</currency> <nullable>1</nullable> <signed>false</signed> <searchable>true</searchable> <column-display-size>10</column-display-size> <column-label>COL1</column-label> <column-name>COL1</column-name> <schema-name/> <column-precision>10</column-precision> <column-scale>0</column-scale> <table-name/> <catalog-name/> <column-type>1</column-type> <column-type-name>CHAR</column-type-name> </column-definition> <column-definition> <column-index>2</column-index> <auto-increment>false</auto-increment> <case-sensitive>false</case-sensitive> <currency>false</currency> <nullable>1</nullable> <signed>true</signed> <searchable>true</searchable> <column-display-size>39</column-display-size> <column-label>COL2</column-label> <column-name>COL2</column-name> <schema-name/> <column-precision>38</column-precision> <column-scale>0</column-scale> <table-name/> <catalog-name/> <column-type>3</column-type> <column-type-name>NUMBER</column-type-name> </column-definition> </metadata>
WebRowSet
object is described in XML. Note, that this describes aWebRowSet
object that has not undergone any modifications since its instantiation. AcurrentRow
tag is mapped to each row of the table structure that theWebRowSet
object provides. AcolumnValue
tag may contain either thestringData
orbinaryData
tag, according to the SQL type that the XML value is mapping back to. ThebinaryData
tag contains data in the Base64 encoding and is typically used forBLOB
andCLOB
type data.<data> <currentRow> <columnValue> firstrow </columnValue> <columnValue> 1 </columnValue> </currentRow> <currentRow> <columnValue> secondrow </columnValue> <columnValue> 2 </columnValue> </currentRow> <currentRow> <columnValue> thirdrow </columnValue> <columnValue> 3 </columnValue> </currentRow> <currentRow> <columnValue> fourthrow </columnValue> <columnValue> 4 </columnValue> </currentRow> </data>
2.2 State 2 - Deleting a Row
Deleting a row in aWebRowSet
object involves simply moving to the row to be deleted and then calling the methoddeleteRow
, as in any otherRowSet
object. The following two lines of code, in which wrs is aWebRowSet
object, delete the third row.wrs.absolute(3); wrs.deleteRow();
The XML description shows the third row is marked as adeleteRow
, which eliminates the third row in theWebRowSet
object.<data> <currentRow> <columnValue> firstrow </columnValue> <columnValue> 1 </columnValue> </currentRow> <currentRow> <columnValue> secondrow </columnValue> <columnValue> 2 </columnValue> </currentRow> <deleteRow> <columnValue> thirdrow </columnValue> <columnValue> 3 </columnValue> </deleteRow> <currentRow> <columnValue> fourthrow </columnValue> <columnValue> 4 </columnValue> </currentRow> </data>
2.3 State 3 - Inserting a Row
AWebRowSet
object can insert a new row by moving to the insert row, calling the appropriate updater methods for each column in the row, and then calling the methodinsertRow
.wrs.moveToInsertRow(); wrs.updateString(1, "fifththrow"); wrs.updateString(2, "5"); wrs.insertRow();
next
moves the cursor to the correct row. Calling the methodacceptChanges
writes the change to the data source.wrs.moveToCurrentRow(); wrs.next(); wrs.updateString(2, "V"); wrs.acceptChanges();
<data> <currentRow> <columnValue> firstrow </columnValue> <columnValue> 1 </columnValue> </currentRow> <currentRow> <columnValue> secondrow </columnValue> <columnValue> 2 </columnValue> </currentRow> <currentRow> <columnValue> newthirdrow </columnValue> <columnValue> III </columnValue> </currentRow> <insertRow> <columnValue> fifthrow </columnValue> <columnValue> 5 </columnValue> <updateValue> V </updateValue> </insertRow> <currentRow> <columnValue> fourthrow </columnValue> <columnValue> 4 </columnValue> </currentRow> </date>
2.4 State 4 - Modifying a Row
Modifying a row produces specific XML that records both the new value and the value that was replaced. The value that was replaced becomes the original value, and the new value becomes the current value. The following code moves the cursor to a specific row, performs some modifications, and updates the row when complete.wrs.absolute(5); wrs.updateString(1, "new4thRow"); wrs.updateString(2, "IV"); wrs.updateRow();
modifyRow
tag. Both the original and new values are contained within the tag for original row tracking purposes.<data> <currentRow> <columnValue> firstrow </columnValue> <columnValue> 1 </columnValue> </currentRow> <currentRow> <columnValue> secondrow </columnValue> <columnValue> 2 </columnValue> </currentRow> <currentRow> <columnValue> newthirdrow </columnValue> <columnValue> III </columnValue> </currentRow> <currentRow> <columnValue> fifthrow </columnValue> <columnValue> 5 </columnValue> </currentRow> <modifyRow> <columnValue> fourthrow </columnValue> <updateValue> new4thRow </updateValue> <columnValue> 4 </columnValue> <updateValue> IV </updateValue> </modifyRow> </data>
- Since:
- 1.5
- See Also:
JdbcRowSet
,CachedRowSet
,FilteredRowSet
,JoinRowSet
-
-
Field Summary
Fields Modifier and Type Field Description static String
PUBLIC_XML_SCHEMA
The public identifier for the XML Schema definition that defines the XML tags and their valid values for aWebRowSet
implementation.static String
SCHEMA_SYSTEM_ID
The URL for the XML Schema definition file that defines the XML tags and their valid values for aWebRowSet
implementation.-
Fields inherited from interface javax.sql.rowset.CachedRowSet
COMMIT_ON_ACCEPT_CHANGES
-
Fields inherited from interface 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
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
readXml(InputStream iStream)
Reads a stream based XML input to populate thisWebRowSet
object.void
readXml(Reader reader)
Reads aWebRowSet
object in its XML format from the givenReader
object.void
writeXml(OutputStream oStream)
Writes the data, properties, and metadata for thisWebRowSet
object to the givenOutputStream
object in XML format.void
writeXml(Writer writer)
Writes the data, properties, and metadata for thisWebRowSet
object to the givenWriter
object in XML format.void
writeXml(ResultSet rs, OutputStream oStream)
Populates thisWebRowSet
object with the contents of the givenResultSet
object and writes its data, properties, and metadata to the givenOutputStream
object in XML format.void
writeXml(ResultSet rs, Writer writer)
Populates thisWebRowSet
object with the contents of the givenResultSet
object and writes its data, properties, and metadata to the givenWriter
object in XML format.-
Methods inherited from interface javax.sql.rowset.CachedRowSet
acceptChanges, acceptChanges, columnUpdated, columnUpdated, commit, createCopy, createCopyNoConstraints, createCopySchema, createShared, execute, getKeyColumns, getOriginal, getOriginalRow, getPageSize, getRowSetWarnings, getShowDeleted, getSyncProvider, getTableName, nextPage, populate, populate, previousPage, release, restoreOriginal, rollback, rollback, rowSetPopulated, setKeyColumns, setMetaData, setOriginalRow, setPageSize, setShowDeleted, setSyncProvider, setTableName, size, toCollection, toCollection, toCollection, undoDelete, undoInsert, undoUpdate
-
Methods inherited from interface javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
-
Methods inherited from interface 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, 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, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull
-
Methods inherited from interface 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
-
Methods inherited from interface java.sql.Wrapper
isWrapperFor, unwrap
-
-
-
-
Field Detail
-
PUBLIC_XML_SCHEMA
static final String PUBLIC_XML_SCHEMA
The public identifier for the XML Schema definition that defines the XML tags and their valid values for aWebRowSet
implementation.- See Also:
- Constant Field Values
-
SCHEMA_SYSTEM_ID
static final String SCHEMA_SYSTEM_ID
The URL for the XML Schema definition file that defines the XML tags and their valid values for aWebRowSet
implementation.- See Also:
- Constant Field Values
-
-
Method Detail
-
readXml
void readXml(Reader reader) throws SQLException
Reads aWebRowSet
object in its XML format from the givenReader
object.- Parameters:
reader
- thejava.io.Reader
stream from which thisWebRowSet
object will be populated- Throws:
SQLException
- if a database access error occurs
-
readXml
void readXml(InputStream iStream) throws SQLException, IOException
Reads a stream based XML input to populate thisWebRowSet
object.- Parameters:
iStream
- thejava.io.InputStream
from which thisWebRowSet
object will be populated- Throws:
SQLException
- if a data source access error occursIOException
- if an IO exception occurs
-
writeXml
void writeXml(ResultSet rs, Writer writer) throws SQLException
Populates thisWebRowSet
object with the contents of the givenResultSet
object and writes its data, properties, and metadata to the givenWriter
object in XML format.NOTE: The
WebRowSet
cursor may be moved to write out the contents to the XML data source. If implemented in this way, the cursor must be returned to its position just prior to thewriteXml()
call.- Parameters:
rs
- theResultSet
object with which to populate thisWebRowSet
objectwriter
- thejava.io.Writer
object to write to.- Throws:
SQLException
- if an error occurs writing out the rowset contents in XML format
-
writeXml
void writeXml(ResultSet rs, OutputStream oStream) throws SQLException, IOException
Populates thisWebRowSet
object with the contents of the givenResultSet
object and writes its data, properties, and metadata to the givenOutputStream
object in XML format.NOTE: The
WebRowSet
cursor may be moved to write out the contents to the XML data source. If implemented in this way, the cursor must be returned to its position just prior to thewriteXml()
call.- Parameters:
rs
- theResultSet
object with which to populate thisWebRowSet
objectoStream
- thejava.io.OutputStream
to write to- Throws:
SQLException
- if a data source access error occursIOException
- if a IO exception occurs
-
writeXml
void writeXml(Writer writer) throws SQLException
Writes the data, properties, and metadata for thisWebRowSet
object to the givenWriter
object in XML format.- Parameters:
writer
- thejava.io.Writer
stream to write to- Throws:
SQLException
- if an error occurs writing out the rowset contents to XML
-
writeXml
void writeXml(OutputStream oStream) throws SQLException, IOException
Writes the data, properties, and metadata for thisWebRowSet
object to the givenOutputStream
object in XML format.- Parameters:
oStream
- thejava.io.OutputStream
stream to write to- Throws:
SQLException
- if a data source access error occursIOException
- if a IO exception occurs
-
-