sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd It describes the standard XML document format required when describing a {@code RowSet} object in XML and must be used be all standard implementationsof the {@code WebRowSet} interface to ensure interoperability. In addition,the {@code WebRowSet} schema uses specific SQL/XML Schema annotations,thus ensuring greater cross platform inter-operability. 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 a {@code RowSet} objectin three distinct areas:
- properties - These properties describe the standard synchronization provider properties in addition to the more general {@code RowSet} properties.
- metadata - This describes the metadata associated with the tabular structure governed by a {@code WebRowSet} object. The metadata described is closely aligned with themetadata accessible in the underlying {@code java.sql.ResultSet} interface.
- data - This describes the original data (the state of data since the last population or last synchronization of the {@code WebRowSet} object) and the currentdata. By keeping track of the delta between the original data and the current data, a {@code WebRowSet} maintains the ability to synchronize changesin its data back to the originating data source.
2.0 WebRowSet States
The following sections demonstrates how a {@code WebRowSet} implementationshould use the XML Schema to describe update, insert, and delete operations and to describe the state of a {@code WebRowSet} object in XML.
2.1 State 1 - Outputting a {@code WebRowSet} Object to XML
In this example, a {@code WebRowSet} object is created and populated with a simple 2 column,5 row table from a data source. Having the 5 rows in a {@code WebRowSet} objectmakes 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 the {@code CachedRowSet}™ interface provide key details that describe WebRowSet properties. Outputting the WebRowSet object to XML using the standard {@code writeXml} methods describes the internal properties as follows:
{@code select co1, col2 from test_table 1 true 0 0 1 0 0 0 false TRANSACTION_READ_UNCOMMITED false jdbc:thin:oracle .com.rowset.provider.RIOptimisticProvider Oracle Corporation 1.0 LOW NONE }
The meta-data describing the make up of the WebRowSet is described in XML as detailed below. Note both columns are described between the {@code column-definition} tags.
{@code 2 1 false true false 1 false true 10 COL1 COL1 10 0 1 CHAR 2 false false false 1 true true 39 COL2 COL2 38 0 3 NUMBER }
Having detailed how the properties and metadata are described, the following details how the contents of a {@code WebRowSet} object is described in XML. Note, thatthis describes a {@code WebRowSet} object that has not undergone anymodifications since its instantiation. A {@code currentRow} tag is mapped to each row of the table structure that the{@code WebRowSet} object provides. A {@code columnValue} tag may containeither the {@code stringData} or {@code binaryData} tag, according tothe SQL type that the XML value is mapping back to. The {@code binaryData} tag contains data in theBase64 encoding and is typically used for {@code BLOB} and {@code CLOB} type data.
{@code firstrow 1 secondrow 2 thirdrow 3 fourthrow 4 }
2.2 State 2 - Deleting a Row
Deleting a row in a {@code WebRowSet} object involves simply moving to the rowto be deleted and then calling the method {@code deleteRow}, as in any other {@code RowSet} object. The followingtwo lines of code, in which
wrs is a {@code WebRowSet} object, deletethe third row.
wrs.absolute(3); wrs.deleteRow();
The XML description shows the third row is marked as a {@code deleteRow}, which eliminates the third row in the {@code WebRowSet} object.
{@code firstrow 1 secondrow 2 thirdrow 3 fourthrow 4 }
2.3 State 3 - Inserting a Row
A {@code WebRowSet} 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 method {@code insertRow}.
{@code wrs.moveToInsertRow(); wrs.updateString(1, "fifththrow"); wrs.updateString(2, "5"); wrs.insertRow();}
The following code fragment changes the second column value in the row just inserted. Note that this code applies when new rows are inserted right after the current row, which is why the method {@code next} moves the cursor to the correct row.Calling the method {@code acceptChanges} writes the change to the data source.
{@code wrs.moveToCurrentRow();wrs.next(); wrs.updateString(2, "V"); wrs.acceptChanges();}
Describing this in XML demonstrates where the Java code inserts a new row and then performs an update on the newly inserted row on an individual field.
{@code firstrow 1 secondrow 2 newthirdrow III fifthrow 5 V fourthrow 4 }
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.
{@code wrs.absolute(5); wrs.updateString(1, "new4thRow"); wrs.updateString(2, "IV"); wrs.updateRow();}
In XML, this is described by the {@code modifyRow} tag. Both the original and newvalues are contained within the tag for original row tracking purposes.
{@code firstrow 1 secondrow 2 newthirdrow III fifthrow 5 fourthrow new4thRow 4 IV }
@see javax.sql.rowset.JdbcRowSet
@see javax.sql.rowset.CachedRowSet
@see javax.sql.rowset.FilteredRowSet
@see javax.sql.rowset.JoinRowSet