/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.sql.rowset;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.io.*;
import java.math.*;
import org.xml.sax.*;
The standard interface that all implementations of a WebRowSet
must implement.
1.0 Overview
The WebRowSetImpl
provides the standard
reference implementation, which may be extended if required.
The standard WebRowSet XML Schema definition is available at the following
URI:
http://java.sun.com/xml/ns/jdbc/webrowset.xsd
It describes the standard XML document format required when describing a
RowSet
object in XML and must be used be all standard implementations
of the WebRowSet
interface to ensure interoperability. In addition,
the 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:
http://standards.iso.org/iso/9075/2002/12/sqlxml
The schema definition describes the internal data of a RowSet
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 underlying java.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,
a WebRowSet
maintains
the ability to synchronize changes in its data back to the originating data source.
2.0 WebRowSet States
The following sections demonstrates how a WebRowSet
implementation
should use the XML Schema to describe update, insert, and delete operations
and to describe the state of a WebRowSet
object in XML.
2.1 State 1 - Outputting a WebRowSet
Object to XML
In this example, a WebRowSet
object is created and populated with a simple 2 column,
5 row table from a data source. Having the 5 rows in a WebRowSet
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
the CachedRowSet
TM interface
provide key details that describe WebRowSet
properties. Outputting the WebRowSet object to XML using the standard
writeXml
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_UNCOMMITED</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>Sun Microsystems</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>
The meta-data describing the make up of the WebRowSet is described
in XML as detailed below. Note both columns are described between the
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>
Having detailed how the properties and metadata are described, the following details
how the contents of a WebRowSet
object is described in XML. Note, that
this describes a WebRowSet
object that has not undergone any
modifications since its instantiation.
A currentRow
tag is mapped to each row of the table structure that the
WebRowSet
object provides. A columnValue
tag may contain
either the stringData
or binaryData
tag, according to
the SQL type that
the XML value is mapping back to. The binaryData
tag contains data in the
Base64 encoding and is typically used for BLOB
and CLOB
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 a WebRowSet
object involves simply moving to the row
to be deleted and then calling the method deleteRow
, as in any other
RowSet
object. The following
two lines of code, in which wrs is a WebRowSet
object, delete
the third row.
wrs.absolute(3);
wrs.deleteRow();
The XML description shows the third row is marked as a deleteRow
,
which eliminates the third row in the WebRowSet
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
A 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 insertRow
.
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 next
moves the cursor to the correct row.
Calling the method acceptChanges
writes the change to the data source.
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.
<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();
In XML, this is described by the 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>
See Also: - JdbcRowSet
- CachedRowSet
- FilteredRowSet
- JoinRowSet
/**
* The standard interface that all implementations of a <code>WebRowSet</code>
* must implement.
* <P>
* <h3>1.0 Overview</h3>
* The <code>WebRowSetImpl</code> provides the standard
* reference implementation, which may be extended if required.
* <P>
* The standard WebRowSet XML Schema definition is available at the following
* URI:
* <ul>
* <pre>
* <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a>
* </pre>
* </ul>
* It describes the standard XML document format required when describing a
* <code>RowSet</code> object in XML and must be used be all standard implementations
* of the <code>WebRowSet</code> interface to ensure interoperability. In addition,
* the <code>WebRowSet</code> 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:
* <ul>
* <pre>
* <a href="http://standards.iso.org/iso/9075/2002/12/sqlxml">http://standards.iso.org/iso/9075/2002/12/sqlxml</a>
* </pre>
* </ul>
* The schema definition describes the internal data of a <code>RowSet</code> object
* in three distinct areas:
* <UL>
* <li><b>properties</b></li>
* These properties describe the standard synchronization provider properties in
* addition to the more general <code>RowSet</code> properties.
* <p>
* <li><b>metadata</b></li>
* This describes the metadata associated with the tabular structure governed by a
* <code>WebRowSet</code> object. The metadata described is closely aligned with the
* metadata accessible in the underlying <code>java.sql.ResultSet</code> interface.
* <p>
* <li><b>data</b></li>
* This describes the original data (the state of data since the last population
* or last synchronization of the <code>WebRowSet</code> object) and the current
* data. By keeping track of the delta between the original data and the current data,
* a <code>WebRowSet</code> maintains
* the ability to synchronize changes in its data back to the originating data source.
* </ul>
* <P>
* <h3>2.0 WebRowSet States</h3>
* The following sections demonstrates how a <code>WebRowSet</code> implementation
* should use the XML Schema to describe update, insert, and delete operations
* and to describe the state of a <code>WebRowSet</code> object in XML.
* <p>
* <h4>2.1 State 1 - Outputting a <code>WebRowSet</code> Object to XML</h3>
* In this example, a <code>WebRowSet</code> 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</code> 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
* the <code>CachedRowSet</code><sup><font size=-2>TM</font></sup> interface
* provide key details that describe WebRowSet
* properties. Outputting the WebRowSet object to XML using the standard
* <code>writeXml</code> methods describes the internal properties as follows:
* <PRE>
* <<font color=red>properties</font>>
* <<font color=red>command</font>>select co1, col2 from test_table<<font color=red>/command</font>>
* <<font color=red>concurrency</font>>1<<font color=red>/concurrency</font>>
* <<font color=red>datasource/</font>>
* <<font color=red>escape-processing</font>>true<<font color=red>/escape-processing</font>>
* <<font color=red>fetch-direction</font>>0<<font color=red>/fetch-direction</font>>
* <<font color=red>fetch-size</font>>0<<font color=red>/fetch-size</font>>
* <<font color=red>isolation-level</font>>1<<font color=red>/isolation-level</font>>
* <<font color=red>key-columns/</font>>
* <<font color=red>map/</font>>
* <<font color=red>max-field-size</font>>0<<font color=red>/max-field-size</font>>
* <<font color=red>max-rows</font>>0<<font color=red>/max-rows</font>>
* <<font color=red>query-timeout</font>>0<<font color=red>/query-timeout</font>>
* <<font color=red>read-only</font>>false<<font color=red>/read-only</font>>
* <<font color=red>rowset-type</font>>TRANSACTION_READ_UNCOMMITED<<font color=red>/rowset-type</font>>
* <<font color=red>show-deleted</font>>false<<font color=red>/show-deleted</font>>
* <<font color=red>table-name/</font>>
* <<font color=red>url</font>>jdbc:thin:oracle<<font color=red>/url</font>>
* <<font color=red>sync-provider</font>>
* <<font color=red>sync-provider-name</font>>.com.rowset.provider.RIOptimisticProvider<<font color=red>/sync-provider-name</font>>
* <<font color=red>sync-provider-vendor</font>>Sun Microsystems<<font color=red>/sync-provider-vendor</font>>
* <<font color=red>sync-provider-version</font>>1.0<<font color=red>/sync-provider-name</font>>
* <<font color=red>sync-provider-grade</font>>LOW<<font color=red>/sync-provider-grade</font>>
* <<font color=red>data-source-lock</font>>NONE<<font color=red>/data-source-lock</font>>
* <<font color=red>/sync-provider</font>>
* <<font color=red>/properties</font>>
* </PRE>
* 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</code> tags.
* <PRE>
* <<font color=red>metadata</font>>
* <<font color=red>column-count</font>>2<<font color=red>/column-count</font>>
* <<font color=red>column-definition</font>>
* <<font color=red>column-index</font>>1<<font color=red>/column-index</font>>
* <<font color=red>auto-increment</font>>false<<font color=red>/auto-increment</font>>
* <<font color=red>case-sensitive</font>>true<<font color=red>/case-sensitive</font>>
* <<font color=red>currency</font>>false<<font color=red>/currency</font>>
* <<font color=red>nullable</font>>1<<font color=red>/nullable</font>>
* <<font color=red>signed</font>>false<<font color=red>/signed</font>>
* <<font color=red>searchable</font>>true<<font color=red>/searchable</font>>
* <<font color=red>column-display-size</font>>10<<font color=red>/column-display-size</font>>
* <<font color=red>column-label</font>>COL1<<font color=red>/column-label</font>>
* <<font color=red>column-name</font>>COL1<<font color=red>/column-name</font>>
* <<font color=red>schema-name/</font>>
* <<font color=red>column-precision</font>>10<<font color=red>/column-precision</font>>
* <<font color=red>column-scale</font>>0<<font color=red>/column-scale</font>>
* <<font color=red>table-name/</font>>
* <<font color=red>catalog-name/</font>>
* <<font color=red>column-type</font>>1<<font color=red>/column-type</font>>
* <<font color=red>column-type-name</font>>CHAR<<font color=red>/column-type-name</font>>
* <<font color=red>/column-definition</font>>
* <<font color=red>column-definition</font>>
* <<font color=red>column-index</font>>2<<font color=red>/column-index</font>>
* <<font color=red>auto-increment</font>>false<<font color=red>/auto-increment</font>>
* <<font color=red>case-sensitive</font>>false<<font color=red>/case-sensitive</font>>
* <<font color=red>currency</font>>false<<font color=red>/currency</font>>
* <<font color=red>nullable</font>>1<<font color=red>/nullable</font>>
* <<font color=red>signed</font>>true<<font color=red>/signed</font>>
* <<font color=red>searchable</font>>true<<font color=red>/searchable</font>>
* <<font color=red>column-display-size</font>>39<<font color=red>/column-display-size</font>>
* <<font color=red>column-label</font>>COL2<<font color=red>/column-label</font>>
* <<font color=red>column-name</font>>COL2<<font color=red>/column-name</font>>
* <<font color=red>schema-name/</font>>
* <<font color=red>column-precision</font>>38<<font color=red>/column-precision</font>>
* <<font color=red>column-scale</font>>0<<font color=red>/column-scale</font>>
* <<font color=red>table-name/</font>>
* <<font color=red>catalog-name/</font>>
* <<font color=red>column-type</font>>3<<font color=red>/column-type</font>>
* <<font color=red>column-type-name</font>>NUMBER<<font color=red>/column-type-name</font>>
* <<font color=red>/column-definition</font>>
* <<font color=red>/metadata</font>>
* </PRE>
* Having detailed how the properties and metadata are described, the following details
* how the contents of a <code>WebRowSet</code> object is described in XML. Note, that
* this describes a <code>WebRowSet</code> object that has not undergone any
* modifications since its instantiation.
* A <code>currentRow</code> tag is mapped to each row of the table structure that the
* <code>WebRowSet</code> object provides. A <code>columnValue</code> tag may contain
* either the <code>stringData</code> or <code>binaryData</code> tag, according to
* the SQL type that
* the XML value is mapping back to. The <code>binaryData</code> tag contains data in the
* Base64 encoding and is typically used for <code>BLOB</code> and <code>CLOB</code> type data.
* <PRE>
* <<font color=red>data</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* firstrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 1
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* secondrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 2
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* thirdrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 3
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* fourthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 4
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>/data</font>>
* </PRE>
* <h4>2.2 State 2 - Deleting a Row</h4>
* Deleting a row in a <code>WebRowSet</code> object involves simply moving to the row
* to be deleted and then calling the method <code>deleteRow</code>, as in any other
* <code>RowSet</code> object. The following
* two lines of code, in which <i>wrs</i> is a <code>WebRowSet</code> object, delete
* the third row.
* <PRE>
* wrs.absolute(3);
* wrs.deleteRow();
* </PRE>
* The XML description shows the third row is marked as a <code>deleteRow</code>,
* which eliminates the third row in the <code>WebRowSet</code> object.
* <PRE>
* <<font color=red>data</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* firstrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 1
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* secondrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 2
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>deleteRow</font>>
* <<font color=red>columnValue</font>>
* thirdrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 3
* <<font color=red>/columnValue</font>>
* <<font color=red>/deleteRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* fourthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 4
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>/data</font>>
* </PRE>
* <h4>2.3 State 3 - Inserting a Row</h4>
* A <code>WebRowSet</code> 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>.
* <PRE>
* wrs.moveToInsertRow();
* wrs.updateString(1, "fifththrow");
* wrs.updateString(2, "5");
* wrs.insertRow();
* </PRE>
* 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</code> moves the cursor to the correct row.
* Calling the method <code>acceptChanges</code> writes the change to the data source.
*
* <PRE>
* wrs.moveToCurrentRow();
* wrs.next();
* wrs.updateString(2, "V");
* wrs.acceptChanges();
* :
* </PRE>
* 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.
* <PRE>
* <<font color=red>data</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* firstrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 1
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* secondrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 2
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* newthirdrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* III
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>insertRow</font>>
* <<font color=red>columnValue</font>>
* fifthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 5
* <<font color=red>/columnValue</font>>
* <<font color=red>updateValue</font>>
* V
* <<font color=red>/updateValue</font>>
* <<font color=red>/insertRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* fourthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 4
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>/date</font>>
* </PRE>
* <h4>2.4 State 4 - Modifying a Row</h4>
* 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.
* <PRE>
* wrs.absolute(5);
* wrs.updateString(1, "new4thRow");
* wrs.updateString(2, "IV");
* wrs.updateRow();
* </PRE>
* In XML, this is described by the <code>modifyRow</code> tag. Both the original and new
* values are contained within the tag for original row tracking purposes.
* <PRE>
* <<font color=red>data</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* firstrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 1
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* secondrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 2
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* newthirdrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* III
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>currentRow</font>>
* <<font color=red>columnValue</font>>
* fifthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>columnValue</font>>
* 5
* <<font color=red>/columnValue</font>>
* <<font color=red>/currentRow</font>>
* <<font color=red>modifyRow</font>>
* <<font color=red>columnValue</font>>
* fourthrow
* <<font color=red>/columnValue</font>>
* <<font color=red>updateValue</font>>
* new4thRow
* <<font color=red>/updateValue</font>>
* <<font color=red>columnValue</font>>
* 4
* <<font color=red>/columnValue</font>>
* <<font color=red>updateValue</font>>
* IV
* <<font color=red>/updateValue</font>>
* <<font color=red>/modifyRow</font>>
* <<font color=red>/data</font>>
* </PRE>
*
* @see javax.sql.rowset.JdbcRowSet
* @see javax.sql.rowset.CachedRowSet
* @see javax.sql.rowset.FilteredRowSet
* @see javax.sql.rowset.JoinRowSet
*/
public interface WebRowSet extends CachedRowSet {
Reads a WebRowSet
object in its XML format from the given
Reader
object.
Params: - reader – the
java.io.Reader
stream from which this
WebRowSet
object will be populated
Throws: - SQLException – if a database access error occurs
/**
* Reads a <code>WebRowSet</code> object in its XML format from the given
* <code>Reader</code> object.
*
* @param reader the <code>java.io.Reader</code> stream from which this
* <code>WebRowSet</code> object will be populated
* @throws SQLException if a database access error occurs
*/
public void readXml(java.io.Reader reader) throws SQLException;
Reads a stream based XML input to populate this WebRowSet
object.
Params: - iStream – the
java.io.InputStream
from which this
WebRowSet
object will be populated
Throws: - SQLException – if a data source access error occurs
- IOException – if an IO exception occurs
/**
* Reads a stream based XML input to populate this <code>WebRowSet</code>
* object.
*
* @param iStream the <code>java.io.InputStream</code> from which this
* <code>WebRowSet</code> object will be populated
* @throws SQLException if a data source access error occurs
* @throws IOException if an IO exception occurs
*/
public void readXml(java.io.InputStream iStream) throws SQLException, IOException;
Populates this WebRowSet
object with
the contents of the given ResultSet
object and writes its
data, properties, and metadata
to the given Writer
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 the writeXml()
call.
Params: - rs – the
ResultSet
object with which to populate this
WebRowSet
object - writer – the
java.io.Writer
object to write to.
Throws: - SQLException – if an error occurs writing out the rowset
contents in XML format
/**
* Populates this <code>WebRowSet</code> object with
* the contents of the given <code>ResultSet</code> object and writes its
* data, properties, and metadata
* to the given <code>Writer</code> object in XML format.
* <p>
* NOTE: The <code>WebRowSet</code> cursor may be moved to write out the
* contents to the XML data source. If implemented in this way, the cursor <b>must</b>
* be returned to its position just prior to the <code>writeXml()</code> call.
*
* @param rs the <code>ResultSet</code> object with which to populate this
* <code>WebRowSet</code> object
* @param writer the <code>java.io.Writer</code> object to write to.
* @throws SQLException if an error occurs writing out the rowset
* contents in XML format
*/
public void writeXml(ResultSet rs, java.io.Writer writer) throws SQLException;
Populates this WebRowSet
object with
the contents of the given ResultSet
object and writes its
data, properties, and metadata
to the given OutputStream
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 the writeXml()
call.
Params: - rs – the
ResultSet
object with which to populate this
WebRowSet
object - oStream – the
java.io.OutputStream
to write to
Throws: - SQLException – if a data source access error occurs
- IOException – if a IO exception occurs
/**
* Populates this <code>WebRowSet</code> object with
* the contents of the given <code>ResultSet</code> object and writes its
* data, properties, and metadata
* to the given <code>OutputStream</code> object in XML format.
* <p>
* NOTE: The <code>WebRowSet</code> cursor may be moved to write out the
* contents to the XML data source. If implemented in this way, the cursor <b>must</b>
* be returned to its position just prior to the <code>writeXml()</code> call.
*
* @param rs the <code>ResultSet</code> object with which to populate this
* <code>WebRowSet</code> object
* @param oStream the <code>java.io.OutputStream</code> to write to
* @throws SQLException if a data source access error occurs
* @throws IOException if a IO exception occurs
*/
public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException;
Writes the data, properties, and metadata for this WebRowSet
object
to the given Writer
object in XML format.
Params: - writer – the
java.io.Writer
stream to write to
Throws: - SQLException – if an error occurs writing out the rowset
contents to XML
/**
* Writes the data, properties, and metadata for this <code>WebRowSet</code> object
* to the given <code>Writer</code> object in XML format.
*
* @param writer the <code>java.io.Writer</code> stream to write to
* @throws SQLException if an error occurs writing out the rowset
* contents to XML
*/
public void writeXml(java.io.Writer writer) throws SQLException;
Writes the data, properties, and metadata for this WebRowSet
object
to the given OutputStream
object in XML format.
Params: - oStream – the
java.io.OutputStream
stream to write to
Throws: - SQLException – if a data source access error occurs
- IOException – if a IO exception occurs
/**
* Writes the data, properties, and metadata for this <code>WebRowSet</code> object
* to the given <code>OutputStream</code> object in XML format.
*
* @param oStream the <code>java.io.OutputStream</code> stream to write to
* @throws SQLException if a data source access error occurs
* @throws IOException if a IO exception occurs
*/
public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException;
The public identifier for the XML Schema definition that defines the XML
tags and their valid values for a WebRowSet
implementation.
/**
* The public identifier for the XML Schema definition that defines the XML
* tags and their valid values for a <code>WebRowSet</code> implementation.
*/
public static String PUBLIC_XML_SCHEMA =
"--//Sun Microsystems, Inc.//XSD Schema//EN";
The URL for the XML Schema definition file that defines the XML tags and
their valid values for a WebRowSet
implementation.
/**
* The URL for the XML Schema definition file that defines the XML tags and
* their valid values for a <code>WebRowSet</code> implementation.
*/
public static String SCHEMA_SYSTEM_ID = "http://java.sun.com/xml/ns/jdbc/webrowset.xsd";
}