undefect. CWE-407 — 63 sites patched across 27 ecosystems

Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com

Patches, unit tests, benchmarks, whitepaper, and outreach briefs.
Public domain — no copyright claimed. Use freely.
This commit is contained in:
russell@unturf.com 2026-03-26 17:11:57 -04:00
commit 0a580b313d
70422 changed files with 17213626 additions and 0 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,157 @@
/*
* Copyright (c) 2005, 2022, 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 com.sun.rowset;
import java.io.*;
import java.util.*;
/**
* This class is used to help in localization of resources,
* especially the exception strings.
*
* @author Amit Handa
*/
public class JdbcRowSetResourceBundle implements Serializable {
/**
* This <code>String</code> variable stores the location
* of the resource bundle location.
*/
private static String fileName;
/**
* This variable will hold the <code>PropertyResourceBundle</code>
* of the text to be internationalized.
*/
private transient PropertyResourceBundle propResBundle;
/**
* The constructor initializes to this object
*
*/
private static volatile JdbcRowSetResourceBundle jpResBundle;
/**
* The variable which will represent the properties
* the suffix or extension of the resource bundle.
**/
private static final String PROPERTIES = "properties";
/**
* The variable to represent underscore
**/
private static final String UNDERSCORE = "_";
/**
* The variable which will represent dot
**/
private static final String DOT = ".";
/**
* The variable which will represent the slash.
**/
private static final String SLASH = "/";
/**
* The variable where the default resource bundle will
* be placed.
**/
private static final String PATH = "com.sun.rowset.RowSetResourceBundle";
/**
* The constructor which initializes the resource bundle.
* Note this is a private constructor and follows Singleton
* Design Pattern.
*
* @throws IOException if unable to load the ResourceBundle
* according to locale or the default one.
*/
private JdbcRowSetResourceBundle () throws IOException {
// Try to load the resource bundle according
// to the locale. Else if no bundle found according
// to the locale load the default.
// In default case the default locale resource bundle
// should always be loaded else it
// will be difficult to throw appropriate
// exception string messages.
Locale locale = Locale.getDefault();
// Load appropriate bundle according to locale
propResBundle = (PropertyResourceBundle) ResourceBundle.getBundle(PATH,
locale, JdbcRowSetResourceBundle.class.getModule());
}
/**
* This method is used to get a handle to the
* initialized instance of this class. Note that
* at any time there is only one instance of this
* class initialized which will be returned.
*
* @throws IOException if unable to find the RowSetResourceBundle.properties
*/
public static JdbcRowSetResourceBundle getJdbcRowSetResourceBundle()
throws IOException {
if(jpResBundle == null){
synchronized(JdbcRowSetResourceBundle.class) {
if(jpResBundle == null){
jpResBundle = new JdbcRowSetResourceBundle();
} //end if
} //end synchronized block
} //end if
return jpResBundle;
}
/**
* This method returns an enumerated handle of the keys
* which correspond to values translated to various locales.
*
* @return an enumeration of keys which have messages translated to
* corresponding locales.
*/
@SuppressWarnings("rawtypes")
public Enumeration getKeys() {
return propResBundle.getKeys();
}
/**
* This method takes the key as an argument and
* returns the corresponding value reading it
* from the Resource Bundle loaded earlier.
*
* @return value in locale specific language
* according to the key passed.
*/
public Object handleGetObject(String key) {
return propResBundle.handleGetObject(key);
}
static final long serialVersionUID = 436199386225359954L;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,69 @@
/*
* Copyright (c) 2010, 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 com.sun.rowset;
import java.sql.SQLException;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.FilteredRowSet;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.JoinRowSet;
import javax.sql.rowset.WebRowSet;
import javax.sql.rowset.RowSetFactory;
/**
* This is the implementation specific class for the
* <code>javax.sql.rowset.spi.RowSetFactory</code>. This is the platform
* default implementation for the Java SE platform.
*
* @author Lance Andersen
*
*
* @version 1.7
*/
public final class RowSetFactoryImpl implements RowSetFactory {
public CachedRowSet createCachedRowSet() throws SQLException {
return new com.sun.rowset.CachedRowSetImpl();
}
public FilteredRowSet createFilteredRowSet() throws SQLException {
return new com.sun.rowset.FilteredRowSetImpl();
}
public JdbcRowSet createJdbcRowSet() throws SQLException {
return new com.sun.rowset.JdbcRowSetImpl();
}
public JoinRowSet createJoinRowSet() throws SQLException {
return new com.sun.rowset.JoinRowSetImpl();
}
public WebRowSet createWebRowSet() throws SQLException {
return new com.sun.rowset.WebRowSetImpl();
}
}

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Invalid ResultSet object supplied to populate method
cachedrowsetimpl.invalidp = Invalid persistence provider generated
cachedrowsetimpl.nullhash = Cannot instantiate CachedRowSetImpl instance. Null Hashtable supplied to constructor
cachedrowsetimpl.invalidop = Invalid operation while on insert row
cachedrowsetimpl.accfailed = acceptChanges Failed
cachedrowsetimpl.invalidcp = Invalid cursor position
cachedrowsetimpl.illegalop = Illegal operation on non-inserted row
cachedrowsetimpl.clonefail = Clone failed: {0}
cachedrowsetimpl.invalidcol = Invalid column index
cachedrowsetimpl.invalcolnm = Invalid column name
cachedrowsetimpl.boolfail = getBoolen Failed on value ( {0} ) in column {1}
cachedrowsetimpl.bytefail = getByte Failed on value ( {0} ) in column {1}
cachedrowsetimpl.shortfail = getShort Failed on value ( {0} ) in column {1}
cachedrowsetimpl.intfail = getInt Failed on value ( {0} ) in column {1}
cachedrowsetimpl.longfail = getLong Failed on value ( {0} ) in column {1}
cachedrowsetimpl.floatfail = getFloat failed on value ( {0} ) in column {1}
cachedrowsetimpl.doublefail = getDouble failed on value ( {0} ) in column {1}
cachedrowsetimpl.dtypemismt = Data Type Mismatch
cachedrowsetimpl.datefail = getDate Failed on value ( {0} ) in column {1} no conversion available
cachedrowsetimpl.timefail = getTime failed on value ( {0} ) in column {1} no conversion available
cachedrowsetimpl.posupdate = Positioned updates not supported
cachedrowsetimpl.unableins = Unable to instantiate : {0}
cachedrowsetimpl.beforefirst = beforeFirst : Invalid cursor operation
cachedrowsetimpl.first = First : Invalid cursor operation
cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute : Invalid cursor position
cachedrowsetimpl.relative = relative : Invalid cursor position
cachedrowsetimpl.asciistream = read failed for ascii stream
cachedrowsetimpl.binstream = read failed on binary stream
cachedrowsetimpl.failedins = Failed on insert row
cachedrowsetimpl.updateins = updateRow called while on insert row
cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow : no meta data
cachedrowsetimpl.movetoins2 = moveToInsertRow : invalid number of columns
cachedrowsetimpl.tablename = Table name cannot be null
cachedrowsetimpl.keycols = Invalid key columns
cachedrowsetimpl.opnotsupp = Operation not supported by Database
cachedrowsetimpl.matchcols = Match columns are not the same as those set
cachedrowsetimpl.setmatchcols = Set Match columns before getting them
cachedrowsetimpl.matchcols1 = Match columns should be greater than 0
cachedrowsetimpl.matchcols2 = Match columns should be empty or null string
cachedrowsetimpl.unsetmatch = Columns being unset are not the same as set
cachedrowsetimpl.unsetmatch1 = Use column name as argument to unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Use column ID as argument to unsetMatchColumn
cachedrowsetimpl.numrows = Number of rows is less than zero or less than fetch size
cachedrowsetimpl.startpos = Start position cannot be negative
cachedrowsetimpl.nextpage = Populate data before calling
cachedrowsetimpl.pagesize = Page size cannot be less than zero
cachedrowsetimpl.pagesize1 = Page size cannot be greater than maxRows
cachedrowsetimpl.fwdonly = ResultSet is forward only
cachedrowsetimpl.type = Type is : {0}
cachedrowsetimpl.opnotysupp = Operation not yet supported
cachedrowsetimpl.featnotsupp = Feature not supported
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = Cannot instantiate WebRowSetImpl instance. Null Hashtable supplied to constructor
webrowsetimpl.invalidwr = Invalid writer
webrowsetimpl.invalidrd = Invalid reader
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative : Invalid cursor operation
filteredrowsetimpl.absolute = absolute : Invalid cursor operation
filteredrowsetimpl.notallowed = This value is not allowed through the filter
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Not an instance of rowset
joinrowsetimpl.matchnotset = Match Column not set for join
joinrowsetimpl.numnotequal = Number of elements in rowset not equal to match column
joinrowsetimpl.notdefined = This is not a defined type of join
joinrowsetimpl.notsupported = This type of join is not supported
joinrowsetimpl.initerror = JoinRowSet initialization error
joinrowsetimpl.genericerr = Generic joinrowset initial error
joinrowsetimpl.emptyrowset = Empty rowset cannot be added to this JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Invalid state
jdbcrowsetimpl.connect = JdbcRowSet (connect) JNDI unable to connect
jdbcrowsetimpl.paramtype = Unable to deduce param type
jdbcrowsetimpl.matchcols = Match Columns are not the same as those set
jdbcrowsetimpl.setmatchcols = Set the match columns before getting them
jdbcrowsetimpl.matchcols1 = Match columns should be greater than 0
jdbcrowsetimpl.matchcols2 = Match columns cannot be null or empty string
jdbcrowsetimpl.unsetmatch = Columns being unset are not the same as those set
jdbcrowsetimpl.usecolname = Use column name as argument to unsetMatchColumn
jdbcrowsetimpl.usecolid = Use column ID as argument to unsetMatchColumn
jdbcrowsetimpl.resnotupd = ResultSet is not updatable
jdbcrowsetimpl.opnotysupp = Operation not yet supported
jdbcrowsetimpl.featnotsupp = Feature not supported
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) Unable to connect
crsreader.paramtype = Unable to deduce param type
crsreader.connecterr = Internal Error in RowSetReader: no connection or command
crsreader.datedetected = Detected a Date
crsreader.caldetected = Detected a Calendar
#CachedRowSetWriter exceptions
crswriter.connect = Unable to get connection
crswriter.tname = writeData cannot determine table name
crswriter.params1 = Value of params1 : {0}
crswriter.params2 = Value of params2 : {0}
crswriter.conflictsno = conflicts while synchronizing
#InsertRow exceptions
insertrow.novalue = No value has been inserted
#SyncResolverImpl exceptions
syncrsimpl.indexval = Index value out of range
syncrsimpl.noconflict = This column not in conflict
syncrsimpl.syncnotpos = Synchronization is not possible
syncrsimpl.valtores = Value to be resolved can either be in the database or in cachedrowset
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
wrsxmlwriter.sqlex = SQLException : {0}
wrsxmlwriter.failedwrite = Failed to write value
wsrxmlwriter.notproper = Not a proper type
#XmlReaderContentHandler exceptions
xmlrch.errmap = Error setting Map : {0}
xmlrch.errmetadata = Error setting metadata : {0}
xmlrch.errinsertval = Error inserting values : {0}
xmlrch.errconstr = Error constructing row : {0}
xmlrch.errdel = Error deleting row : {0}
xmlrch.errinsert = Error constructing insert row : {0}
xmlrch.errinsdel = Error constructing insdel row : {0}
xmlrch.errupdate = Error constructing update row : {0}
xmlrch.errupdrow = Error updating row : {0}
xmlrch.chars = characters :
xmlrch.badvalue = Bad value ; non-nullable property
xmlrch.badvalue1 = Bad value ; non-nullable metadata
xmlrch.warning = ** Warning : {0} , line : {1} , uri : {2}
#RIOptimisticProvider Exceptions
riop.locking = Locking classification is not supported
#RIXMLProvider exceptions
rixml.unsupp = Unsupported with RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Ungültiges ResultSet-Objekt zum Auffüllen der Methode angegeben
cachedrowsetimpl.invalidp = Ungültiger Persistence-Provider generiert
cachedrowsetimpl.nullhash = CachedRowSetImpl-Instanz kann nicht instanziiert werden. Null-Hashtabelle für Constructor angegeben
cachedrowsetimpl.invalidop = Ungültiger Vorgang beim Zeileneinfügen
cachedrowsetimpl.accfailed = acceptChanges nicht erfolgreich
cachedrowsetimpl.invalidcp = Ungültige Cursorposition
cachedrowsetimpl.illegalop = Unzulässiger Vorgang bei nicht eingefügter Zeile
cachedrowsetimpl.clonefail = Klonen nicht erfolgreich: {0}
cachedrowsetimpl.invalidcol = Ungültiger Spaltenindex
cachedrowsetimpl.invalcolnm = Ungültiger Spaltenname
cachedrowsetimpl.boolfail = getBoolen bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.bytefail = getByte bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.shortfail = getShort bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.intfail = getInt bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.longfail = getLong bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.floatfail = getFloat bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.doublefail = getDouble bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
cachedrowsetimpl.dtypemismt = Keine Datentypübereinstimmung
cachedrowsetimpl.datefail = getDate bei Wert ( {0} ) in Spalte {1} nicht erfolgreich. Keine Konvertierung möglich
cachedrowsetimpl.timefail = getTime bei Wert ( {0} ) in Spalte {1} nicht erfolgreich. Keine Konvertierung möglich
cachedrowsetimpl.posupdate = Positionierte Updates werden nicht unterstützt
cachedrowsetimpl.unableins = Keine Instanziierung möglich: {0}
cachedrowsetimpl.beforefirst = beforeFirst: Ungültiger Cursorvorgang
cachedrowsetimpl.first = First: Ungültiger Cursorvorgang
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: Ungültige Cursorposition
cachedrowsetimpl.relative = relative: Ungültige Cursorposition
cachedrowsetimpl.asciistream = Lesen von ASCII-Stream nicht erfolgreich
cachedrowsetimpl.binstream = Lesen von Binär-Stream nicht erfolgreich
cachedrowsetimpl.failedins = Fehler beim Zeileneinfügen
cachedrowsetimpl.updateins = updateRow beim Zeileneinfügen aufgerufen
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: keine Metadaten
cachedrowsetimpl.movetoins2 = moveToInsertRow: ungültige Spaltenanzahl
cachedrowsetimpl.tablename = Tabellenname darf nicht null sein
cachedrowsetimpl.keycols = Ungültige Schlüsselspalten
cachedrowsetimpl.opnotsupp = Vorgang nicht von Datenbank unterstützt
cachedrowsetimpl.matchcols = Übereinstimmungsspalten entsprechen nicht den festgelegten Spalten
cachedrowsetimpl.setmatchcols = Übereinstimmungsspalten müssen vor dem Abrufen festgelegt werden
cachedrowsetimpl.matchcols1 = Wert für Übereinstimmungsspalten muss größer als 0 sein
cachedrowsetimpl.matchcols2 = Übereinstimmungsspalten müssen leer sein oder eine Nullzeichenfolge aufweisen
cachedrowsetimpl.unsetmatch = Spalten, deren Wert aufgehoben wird, entsprechen nicht den festgelegten Spalten
cachedrowsetimpl.unsetmatch1 = Spaltenname als Argument für unsetMatchColumn verwenden
cachedrowsetimpl.unsetmatch2 = Spalten-ID als Argument für unsetMatchColumn verwenden
cachedrowsetimpl.numrows = Zeilenanzahl ist kleiner als null oder kleiner als Abrufgröße
cachedrowsetimpl.startpos = Startposition darf keinen Negativwert aufweisen
cachedrowsetimpl.nextpage = Daten müssen vor dem Aufruf ausgefüllt werden
cachedrowsetimpl.pagesize = Seitengröße darf nicht kleiner als null sein
cachedrowsetimpl.pagesize1 = Seitengröße darf nicht größer als maxRows sein
cachedrowsetimpl.fwdonly = ResultSet kann nur vorwärts gerichtet sein
cachedrowsetimpl.type = Typ ist: {0}
cachedrowsetimpl.opnotysupp = Vorgang noch nicht unterstützt
cachedrowsetimpl.featnotsupp = Feature nicht unterstützt
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = WebRowSetImpl-Instanz kann nicht instanziiert werden. Null-Hashtabelle für Constructor angegeben
webrowsetimpl.invalidwr = Ungültiger Writer
webrowsetimpl.invalidrd = Ungültiger Reader
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: Ungültiger Cursorvorgang
filteredrowsetimpl.absolute = absolute: Ungültiger Cursorvorgang
filteredrowsetimpl.notallowed = Kein zulässiger Wert im Filter
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Keine Instanz von rowset
joinrowsetimpl.matchnotset = Übereinstimmungsspalte wurde nicht für Join festgelegt
joinrowsetimpl.numnotequal = Elementanzahl in rowset nicht gleich Übereinstimmungsspalte
joinrowsetimpl.notdefined = Kein definierter Join-Typ
joinrowsetimpl.notsupported = Join-Typ wird nicht unterstützt
joinrowsetimpl.initerror = JoinRowSet-Initialisierungsfehler
joinrowsetimpl.genericerr = Generischer JoinRowSet-Initialisierungsfehler
joinrowsetimpl.emptyrowset = Leeres rowset kann nicht zu diesem JoinRowSet hinzugefügt werden
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Ungültiger Status
jdbcrowsetimpl.connect = JdbcRowSet (verbinden), keine JNDI-Verbindung möglich
jdbcrowsetimpl.paramtype = Parametertyp kann nicht abgeleitet werden
jdbcrowsetimpl.matchcols = Übereinstimmungsspalten entsprechen nicht den festgelegten Spalten
jdbcrowsetimpl.setmatchcols = Übereinstimmungsspalten müssen vor dem Abrufen festgelegt werden
jdbcrowsetimpl.matchcols1 = Wert für Übereinstimmungsspalten muss größer als 0 sein
jdbcrowsetimpl.matchcols2 = Übereinstimmungsspalten können keine Null- oder leere Zeichenfolge aufweisen
jdbcrowsetimpl.unsetmatch = Spalten, deren Wert aufgehoben wird, entsprechen nicht den festgelegten Spalten
jdbcrowsetimpl.usecolname = Spaltenname als Argument für unsetMatchColumn verwenden
jdbcrowsetimpl.usecolid = Spalten-ID als Argument für unsetMatchColumn verwenden
jdbcrowsetimpl.resnotupd = ResultSet kann nicht aktualisiert werden
jdbcrowsetimpl.opnotysupp = Vorgang noch nicht unterstützt
jdbcrowsetimpl.featnotsupp = Feature nicht unterstützt
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) Verbindung nicht möglich
crsreader.paramtype = Parametertyp kann nicht abgeleitet werden
crsreader.connecterr = Interner Fehler in RowSetReader: Keine Verbindung oder kein Befehl
crsreader.datedetected = Datum festgestellt
crsreader.caldetected = Kalender festgestellt
#CachedRowSetWriter exceptions
crswriter.connect = Verbindung kann nicht hergestellt werden
crswriter.tname = writeData kann Tabellennamen nicht bestimmen
crswriter.params1 = Wert für params1: {0}
crswriter.params2 = Wert für params2: {0}
crswriter.conflictsno = Konflikte beim Synchronisieren
#InsertRow exceptions
insertrow.novalue = Es wurde kein Wert eingefügt
#SyncResolverImpl exceptions
syncrsimpl.indexval = Indexwert liegt außerhalb des Bereichs
syncrsimpl.noconflict = Kein Konflikt bei dieser Spalte
syncrsimpl.syncnotpos = Keine Synchronisierung möglich
syncrsimpl.valtores = Aufzulösender Wert kann sich entweder in der Datenbank oder in cachedrowset befinden
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ungültige Cursorposition
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** Parsingfehler: {0}, Zeile: {1} , URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0}
wrsxmlwriter.sqlex = SQLException: {0}
wrsxmlwriter.failedwrite = Schreiben des Wertes nicht erfolgreich
wsrxmlwriter.notproper = Kein zulässiger Typ
#XmlReaderContentHandler exceptions
xmlrch.errmap = Fehler beim Festlegen der Zuordnung: {0}
xmlrch.errmetadata = Fehler beim Festlegen der Metadaten: {0}
xmlrch.errinsertval = Fehler beim Einfügen der Werte: {0}
xmlrch.errconstr = Fehler beim Erstellen der Zeile: {0}
xmlrch.errdel = Fehler beim Löschen der Zeile: {0}
xmlrch.errinsert = Fehler beim Erstellen der Einfügezeile: {0}
xmlrch.errinsdel = Fehler beim Erstellen der Einfüge- oder Löschzeile: {0}
xmlrch.errupdate = Fehler beim Erstellen der Updatezeile: {0}
xmlrch.errupdrow = Fehler beim Aktualisieren der Zeile: {0}
xmlrch.chars = Zeichen:
xmlrch.badvalue = Ungültiger Wert. Eigenschaft kann nicht auf null gesetzt werden
xmlrch.badvalue1 = Ungültiger Wert. Metadaten können nicht auf null gesetzt werden
xmlrch.warning = ** Warnung: {0}, Zeile: {1} , URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = Sperren der Klassifizierung wird nicht unterstützt
#RIXMLProvider exceptions
rixml.unsupp = Keine Unterstützung bei RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Se ha proporcionado un objeto ResultSet no válido para el método de relleno
cachedrowsetimpl.invalidp = El proveedor de persistencia generado no es válido
cachedrowsetimpl.nullhash = La instancia CachedRowSetImpl no se puede crear. Se ha proporcionado una tabla hash nula al constructor
cachedrowsetimpl.invalidop = Operación no válida al insertar fila
cachedrowsetimpl.accfailed = Fallo de acceptChanges
cachedrowsetimpl.invalidcp = Posición de cursor no válida
cachedrowsetimpl.illegalop = Operación no permitida en fila no insertada
cachedrowsetimpl.clonefail = Fallo en la clonación: {0}
cachedrowsetimpl.invalidcol = Índice de columnas no válido
cachedrowsetimpl.invalcolnm = Nombre de columna no válido
cachedrowsetimpl.boolfail = Fallo de getBoolen en valor ( {0} ) de columna {1}
cachedrowsetimpl.bytefail = Fallo de getByte en valor ( {0} ) de columna {1}
cachedrowsetimpl.shortfail = Fallo de getShort en valor ( {0} ) de columna {1}
cachedrowsetimpl.intfail = Fallo de getInt en valor ( {0} ) de columna {1}
cachedrowsetimpl.longfail = Fallo de getLong en valor ( {0} ) de columna {1}
cachedrowsetimpl.floatfail = Fallo de getFloat en valor ( {0} ) de columna {1}
cachedrowsetimpl.doublefail = Fallo de getDouble en valor ( {0} ) de columna {1}
cachedrowsetimpl.dtypemismt = Discordancia entre Tipos de Datos
cachedrowsetimpl.datefail = Fallo de getDate en valor ( {0} ) de columna {1}. No es posible convertir
cachedrowsetimpl.timefail = Fallo de getTime en valor ( {0} ) de columna {1}. No es posible convertir
cachedrowsetimpl.posupdate = Actualizaciones posicionadas no soportadas
cachedrowsetimpl.unableins = No se ha podido crear la instancia: {0}
cachedrowsetimpl.beforefirst = beforeFirst: Operación de cursor no válida
cachedrowsetimpl.first = First: Operación de cursor no válida
cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: Posición de cursor no válida
cachedrowsetimpl.relative = relative: Posición de cursor no válida
cachedrowsetimpl.asciistream = fallo en lectura de flujo de caracteres ascii
cachedrowsetimpl.binstream = fallo de lectura de flujo binario
cachedrowsetimpl.failedins = Fallo en inserción de fila
cachedrowsetimpl.updateins = llamada a updateRow mientras se insertaba fila
cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: no hay metadatos
cachedrowsetimpl.movetoins2 = moveToInsertRow: número de columnas no válido
cachedrowsetimpl.tablename = El nombre de la tabla no puede ser nulo
cachedrowsetimpl.keycols = Columnas clave no válidas
cachedrowsetimpl.opnotsupp = La base de datos no admite esta operación
cachedrowsetimpl.matchcols = Las columnas coincidentes no concuerdan con las definidas
cachedrowsetimpl.setmatchcols = Defina las columnas coincidentes antes de obtenerlas
cachedrowsetimpl.matchcols1 = Las columnas coincidentes deben ser mayores que 0
cachedrowsetimpl.matchcols2 = Las columnas coincidentes deben estar vacías o ser una cadena nula
cachedrowsetimpl.unsetmatch = Las columnas cuya definición se está anulando no concuerdan con las definidas
cachedrowsetimpl.unsetmatch1 = Use el nombre de columna como argumento en unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Use el identificador de columna como argumento en unsetMatchColumn
cachedrowsetimpl.numrows = El número de filas es menor que cero o menor que el tamaño recuperado
cachedrowsetimpl.startpos = La posición de inicio no puede ser negativa
cachedrowsetimpl.nextpage = Rellene los datos antes de realizar la llamada
cachedrowsetimpl.pagesize = El tamaño de página no puede ser menor que cero
cachedrowsetimpl.pagesize1 = El tamaño de página no puede ser mayor que maxRows
cachedrowsetimpl.fwdonly = ResultSet sólo se reenvía
cachedrowsetimpl.type = El tipo es: {0}
cachedrowsetimpl.opnotysupp = Operación no soportada todavía
cachedrowsetimpl.featnotsupp = Función no soportada
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = La instancia WebRowSetImpl no se puede crear. Se ha proporcionado una tabla hash nula al constructor
webrowsetimpl.invalidwr = Escritor no válido
webrowsetimpl.invalidrd = Lector no válido
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: Operación de cursor no válida
filteredrowsetimpl.absolute = absolute: Operación de cursor no válida
filteredrowsetimpl.notallowed = El filtro no admite este valor
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = No es una instancia de rowset
joinrowsetimpl.matchnotset = Las columnas coincidentes no están definidas para la unión
joinrowsetimpl.numnotequal = El número de elementos de rowset y el de columnas coincidentes no es el mismo
joinrowsetimpl.notdefined = No es un tipo de unión definido
joinrowsetimpl.notsupported = Este tipo de unión no está soportado
joinrowsetimpl.initerror = Error de inicialización de JoinRowSet
joinrowsetimpl.genericerr = Error de inicialización genérico de joinrowset
joinrowsetimpl.emptyrowset = No se puede agregar un juego de filas vacío a este JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Estado no válido
jdbcrowsetimpl.connect = JdbcRowSet (connect): JNDI no se puede conectar
jdbcrowsetimpl.paramtype = No se puede deducir el tipo de parámetro
jdbcrowsetimpl.matchcols = Las columnas coincidentes no concuerdan con las definidas
jdbcrowsetimpl.setmatchcols = Defina las columnas coincidentes antes de obtenerlas
jdbcrowsetimpl.matchcols1 = Las columnas coincidentes deben ser mayores que 0
jdbcrowsetimpl.matchcols2 = Las columnas coincidentes no pueden estar vacías ni ser una cadena nula
jdbcrowsetimpl.unsetmatch = Las columnas cuya definición se está anulando no concuerdan con las definidas
jdbcrowsetimpl.usecolname = Use el nombre de columna como argumento en unsetMatchColumn
jdbcrowsetimpl.usecolid = Use el identificador de columna como argumento en unsetMatchColumn
jdbcrowsetimpl.resnotupd = ResultSet no se puede actualizar
jdbcrowsetimpl.opnotysupp = Operación no soportada todavía
jdbcrowsetimpl.featnotsupp = Función no soportada
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) No se ha podido conectar
crsreader.paramtype = No se ha podido deducir el tipo de parámetro
crsreader.connecterr = Error interno en RowSetReader: no hay conexión o comando
crsreader.datedetected = Fecha Detectada
crsreader.caldetected = Calendario Detectado
#CachedRowSetWriter exceptions
crswriter.connect = No se ha podido obtener una conexión
crswriter.tname = writeData no puede determinar el nombre de tabla
crswriter.params1 = Valor de params1: {0}
crswriter.params2 = Valor de params2: {0}
crswriter.conflictsno = conflictos en la sincronización
#InsertRow exceptions
insertrow.novalue = No se ha insertado ningún valor
#SyncResolverImpl exceptions
syncrsimpl.indexval = El valor de índice está fuera de rango
syncrsimpl.noconflict = Esta columna no está en conflicto
syncrsimpl.syncnotpos = No se puede sincronizar
syncrsimpl.valtores = El valor que se debe resolver puede estar en la base de datos o en cachedrowset
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Se ha llegado al final de RowSet. Posición de cursor no válida
wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Error de análisis: {0} , línea: {1} , uri: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
wrsxmlwriter.sqlex = SQLException : {0}
wrsxmlwriter.failedwrite = Error al escribir el valor
wsrxmlwriter.notproper = Tipo incorrecto
#XmlReaderContentHandler exceptions
xmlrch.errmap = Error al definir la asignación: {0}
xmlrch.errmetadata = Error al definir metadatos: {0}
xmlrch.errinsertval = Error al insertar los valores: {0}
xmlrch.errconstr = Error al construir la fila: {0}
xmlrch.errdel = Error al suprimir la fila: {0}
xmlrch.errinsert = Error al construir la fila de inserción: {0}
xmlrch.errinsdel = Error al construir la fila de inserción o supresión: {0}
xmlrch.errupdate = Error al construir la fila de actualización: {0}
xmlrch.errupdrow = Error al actualizar la fila: {0}
xmlrch.chars = caracteres:
xmlrch.badvalue = Valor incorrecto; la propiedad no puede ser nula
xmlrch.badvalue1 = Valor incorrecto; los metadatos no pueden ser nulos
xmlrch.warning = ** Advertencia: {0} , línea: {1} , uri: {2}
#RIOptimisticProvider Exceptions
riop.locking = No se permite bloquear la clasificación
#RIXMLProvider exceptions
rixml.unsupp = No soportado con RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = L'objet ResultSet fourni en entrée de la méthode n'est pas valide
cachedrowsetimpl.invalidp = Le fournisseur de persistance généré n'est pas valide
cachedrowsetimpl.nullhash = Impossible de créer une instance de CachedRowSetImpl. Table de hachage NULL fournie au constructeur
cachedrowsetimpl.invalidop = Opération non valide lors de l'insertion de ligne
cachedrowsetimpl.accfailed = Echec de acceptChanges
cachedrowsetimpl.invalidcp = Position du curseur non valide
cachedrowsetimpl.illegalop = Opération non admise sur une ligne non insérée
cachedrowsetimpl.clonefail = Echec du clonage : {0}
cachedrowsetimpl.invalidcol = Index de colonne non valide
cachedrowsetimpl.invalcolnm = Nom de colonne non valide
cachedrowsetimpl.boolfail = Echec de getBoolen pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.bytefail = Echec de getByte pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.shortfail = Echec de getShort pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.intfail = Echec de getInt pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.longfail = Echec de getLong pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.floatfail = Echec de getFloat pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.doublefail = Echec de getDouble pour la valeur ({0}) de la colonne {1}
cachedrowsetimpl.dtypemismt = Le type de données ne correspond pas
cachedrowsetimpl.datefail = Echec de getDate pour la valeur ({0}) de la colonne {1} - Aucune conversion possible
cachedrowsetimpl.timefail = Echec de getTime pour la valeur ({0}) de la colonne {1} - Aucune conversion possible
cachedrowsetimpl.posupdate = Mises à jour choisies non prises en charge
cachedrowsetimpl.unableins = Instanciation impossible : {0}
cachedrowsetimpl.beforefirst = beforeFirst : opération de curseur non valide
cachedrowsetimpl.first = First : opération de curseur non valide
cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute : position de curseur non valide
cachedrowsetimpl.relative = relative : position de curseur non valide
cachedrowsetimpl.asciistream = échec de la lecture pour le flux ASCII
cachedrowsetimpl.binstream = échec de la lecture pour le flux binaire
cachedrowsetimpl.failedins = Echec de l'insertion de ligne
cachedrowsetimpl.updateins = appel de updateRow lors de l'insertion de ligne
cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow : aucune métadonnée
cachedrowsetimpl.movetoins2 = moveToInsertRow : nombre de colonnes non valide
cachedrowsetimpl.tablename = Le nom de la table ne peut pas être NULL
cachedrowsetimpl.keycols = Colonnes de clé non valides
cachedrowsetimpl.opnotsupp = Opération non prise en charge par la base de données
cachedrowsetimpl.matchcols = Les colonnes correspondantes ne sont pas les mêmes que les colonnes définies
cachedrowsetimpl.setmatchcols = Définir les colonnes correspondantes avant de les prendre
cachedrowsetimpl.matchcols1 = Les colonnes correspondantes doivent être supérieures à zéro
cachedrowsetimpl.matchcols2 = Les colonnes correspondantes doivent êtres vides ou ne contenir que des chaînes NULL
cachedrowsetimpl.unsetmatch = Les colonnes définies et non définies sont différentes
cachedrowsetimpl.unsetmatch1 = Utiliser le nom de colonne comme argument pour unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Utiliser l'ID de colonne comme argument pour unsetMatchColumn
cachedrowsetimpl.numrows = Le nombre de lignes est inférieur à zéro ou à la taille d'extraction
cachedrowsetimpl.startpos = La position de départ ne peut pas être négative
cachedrowsetimpl.nextpage = Entrer les données avant l'appel
cachedrowsetimpl.pagesize = La taille de la page ne peut pas être négative
cachedrowsetimpl.pagesize1 = La taille de la page ne peut pas être supérieure à maxRows
cachedrowsetimpl.fwdonly = ResultSet va en avant seulement
cachedrowsetimpl.type = Le type est : {0}
cachedrowsetimpl.opnotysupp = Opération non encore prise en charge
cachedrowsetimpl.featnotsupp = Fonctionnalité non prise en charge
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = Impossible de créer une instance de WebRowSetImpl. Table de hachage NULL fournie au constructeur
webrowsetimpl.invalidwr = Processus d'écriture non valide
webrowsetimpl.invalidrd = Processus de lecture non valide
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative : opération de curseur non valide
filteredrowsetimpl.absolute = absolute : opération de curseur non valide
filteredrowsetimpl.notallowed = Cette valeur n'est pas autorisée via le filtre
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = N'est pas une instance de RowSet
joinrowsetimpl.matchnotset = Les colonnes correspondantes ne sont pas définies pour la jointure
joinrowsetimpl.numnotequal = Le nombre d'éléments dans RowSet est différent du nombre de colonnes correspondantes
joinrowsetimpl.notdefined = Ce n'est pas un type de jointure défini
joinrowsetimpl.notsupported = Ce type de jointure n'est pas pris en charge
joinrowsetimpl.initerror = Erreur d'initialisation de JoinRowSet
joinrowsetimpl.genericerr = Erreur initiale générique de JoinRowSet
joinrowsetimpl.emptyrowset = Impossible d'ajouter un objet RowSet vide à ce JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Etat non valide
jdbcrowsetimpl.connect = Impossible de connecter JNDI JdbcRowSet (connexion)
jdbcrowsetimpl.paramtype = Impossible de déduire le type de paramètre
jdbcrowsetimpl.matchcols = Les colonnes correspondantes ne sont pas les mêmes que les colonnes définies
jdbcrowsetimpl.setmatchcols = Définir les colonnes correspondantes avant de les prendre
jdbcrowsetimpl.matchcols1 = Les colonnes correspondantes doivent être supérieures à zéro
jdbcrowsetimpl.matchcols2 = Les colonnes correspondantes ne doivent pas êtres NULL ni contenir des chaînes vides
jdbcrowsetimpl.unsetmatch = Les colonnes non définies ne sont pas les mêmes que les colonnes définies
jdbcrowsetimpl.usecolname = Utiliser le nom de colonne comme argument pour unsetMatchColumn
jdbcrowsetimpl.usecolid = Utiliser l'ID de colonne comme argument pour unsetMatchColumn
jdbcrowsetimpl.resnotupd = La mise à jour de ResultSet est interdite
jdbcrowsetimpl.opnotysupp = Opération non encore prise en charge
jdbcrowsetimpl.featnotsupp = Fonctionnalité non prise en charge
#CachedRowSetReader exceptions
crsreader.connect = Impossible de connecter (JNDI)
crsreader.paramtype = Impossible de déduire le type de paramètre
crsreader.connecterr = Erreur interne dans RowSetReader : pas de connexion ni de commande
crsreader.datedetected = Une date a été détectée
crsreader.caldetected = Un calendrier a été détecté
#CachedRowSetWriter exceptions
crswriter.connect = Impossible d'obtenir la connexion
crswriter.tname = writeData ne peut pas déterminer le nom de la table
crswriter.params1 = Valeur de params1 : {0}
crswriter.params2 = Valeur de params2 : {0}
crswriter.conflictsno = conflits lors de la synchronisation
#InsertRow exceptions
insertrow.novalue = Aucune valeur n'a été insérée
#SyncResolverImpl exceptions
syncrsimpl.indexval = Valeur d'index hors plage
syncrsimpl.noconflict = Cette colonne n'est pas en conflit
syncrsimpl.syncnotpos = La synchronisation est impossible
syncrsimpl.valtores = La valeur à résoudre peut être soit dans la base de données, soit dans CachedrowSet
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Fin de RowSet atteinte. Position de curseur non valide
wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Erreur d''analyse : {0} , ligne : {1} , URI : {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = Exception d''E/S : {0}
wrsxmlwriter.sqlex = Exception SQL : {0}
wrsxmlwriter.failedwrite = Echec d'écriture de la valeur
wsrxmlwriter.notproper = N'est pas un type correct
#XmlReaderContentHandler exceptions
xmlrch.errmap = Erreur lors de la définition du mappage : {0}
xmlrch.errmetadata = Erreur lors de la définition des métadonnées : {0}
xmlrch.errinsertval = Erreur lors de l''insertion des valeurs : {0}
xmlrch.errconstr = Erreur lors de la construction de la ligne : {0}
xmlrch.errdel = Erreur lors de la suppression de la ligne : {0}
xmlrch.errinsert = Erreur lors de la construction de la ligne à insérer : {0}
xmlrch.errinsdel = Erreur lors de la construction de la ligne insdel : {0}
xmlrch.errupdate = Erreur lors de la construction de la ligne à mettre à jour : {0}
xmlrch.errupdrow = Erreur lors de la mise à jour de la ligne : {0}
xmlrch.chars = caractères :
xmlrch.badvalue = Valeur incorrecte ; cette propriété ne peut pas être NULL
xmlrch.badvalue1 = Valeur incorrecte ; ces métadonnées ne peuvent pas être NULL
xmlrch.warning = ** Avertissement : {0} , ligne : {1} , URI : {2}
#RIOptimisticProvider Exceptions
riop.locking = Le verrouillage de la classification n'est pas pris en charge
#RIXMLProvider exceptions
rixml.unsupp = Non pris en charge avec RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Oggetto ResultSet non valido fornito per l'inserimento dati nel metodo
cachedrowsetimpl.invalidp = Generato provider di persistenza non valido
cachedrowsetimpl.nullhash = Impossibile creare istanza CachedRowSetImpl. Tabella hash nulla fornita al costruttore
cachedrowsetimpl.invalidop = Operazione non valida nella riga di inserimento
cachedrowsetimpl.accfailed = acceptChanges non riuscito
cachedrowsetimpl.invalidcp = Posizione cursore non valida
cachedrowsetimpl.illegalop = Operazione non valida nella riga non inserita
cachedrowsetimpl.clonefail = Copia non riuscita: {0}
cachedrowsetimpl.invalidcol = Indice di colonna non valido
cachedrowsetimpl.invalcolnm = Nome di colonna non valido
cachedrowsetimpl.boolfail = getBoolen non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.bytefail = getByte non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.shortfail = getShort non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.intfail = getInt non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.longfail = getLong non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.floatfail = getFloat non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.doublefail = getDouble non riuscito per il valore ( {0} ) nella colonna {1}
cachedrowsetimpl.dtypemismt = Mancata corrispondenza tipo di dati
cachedrowsetimpl.datefail = getDate non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile.
cachedrowsetimpl.timefail = getTime non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile.
cachedrowsetimpl.posupdate = Aggiornamenti posizionati non supportati
cachedrowsetimpl.unableins = Impossibile creare istanza: {0}
cachedrowsetimpl.beforefirst = beforeFirst: operazione cursore non valida
cachedrowsetimpl.first = First: operazione cursore non valida
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: posizione cursore non valida
cachedrowsetimpl.relative = relative: posizione cursore non valida
cachedrowsetimpl.asciistream = lettura non riuscita per il flusso ascii
cachedrowsetimpl.binstream = lettura non riuscita per il flusso binario
cachedrowsetimpl.failedins = operazione non riuscita nella riga di inserimento
cachedrowsetimpl.updateins = updateRow chiamato nella riga di inserimento
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: nessun metadato
cachedrowsetimpl.movetoins2 = moveToInsertRow: numero di colonne non valido
cachedrowsetimpl.tablename = Il nome di tabella non può essere nullo
cachedrowsetimpl.keycols = Colonne chiave non valide
cachedrowsetimpl.opnotsupp = Operazione non supportata dal database
cachedrowsetimpl.matchcols = Le colonne di corrispondenza non coincidono con le colonne impostate
cachedrowsetimpl.setmatchcols = Impostare le colonne di corrispondenza prima di recuperarle
cachedrowsetimpl.matchcols1 = Le colonne di corrispondenza devono essere superiori a 0
cachedrowsetimpl.matchcols2 = Le colonne di corrispondenza devono essere una stringa vuota o nulla
cachedrowsetimpl.unsetmatch = Le colonne rimosse non coincidono con le colonne impostate
cachedrowsetimpl.unsetmatch1 = Utilizzare il nome di colonna come argomento per unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Utilizzare l'ID di colonna come argomento per unsetMatchColumn
cachedrowsetimpl.numrows = Il numero di righe è inferiore a zero o alla dimensione di recupero
cachedrowsetimpl.startpos = La posizione iniziale non può essere negativa
cachedrowsetimpl.nextpage = Inserire i dati prima di chiamare
cachedrowsetimpl.pagesize = La dimensione della pagina non può essere inferiore a zero
cachedrowsetimpl.pagesize1 = La dimensione della pagina non può essere superiore a maxRows
cachedrowsetimpl.fwdonly = ResultSet è a solo inoltro
cachedrowsetimpl.type = Il tipo è: {0}
cachedrowsetimpl.opnotysupp = Operazione attualmente non supportata
cachedrowsetimpl.featnotsupp = Funzione non supportata
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = Impossibile creare istanza WebRowSetImpl. Tabella hash nulla fornita al costruttore
webrowsetimpl.invalidwr = Processo di scrittura non valido
webrowsetimpl.invalidrd = Processo di lettura non valido
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: operazione cursore non valida
filteredrowsetimpl.absolute = absolute: operazione cursore non valida
filteredrowsetimpl.notallowed = Questo valore non è consentito nel filtro
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Non è un'istanza di rowset
joinrowsetimpl.matchnotset = Colonna di corrispondenza non impostata per l'unione
joinrowsetimpl.numnotequal = Numero di elementi in rowset diverso dalla colonna di corrispondenza
joinrowsetimpl.notdefined = Non è un tipo di unione definito
joinrowsetimpl.notsupported = Questo tipo di unione non è supportato
joinrowsetimpl.initerror = Errore di inizializzazione di JoinRowSet
joinrowsetimpl.genericerr = Errore iniziale di joinrowset generico
joinrowsetimpl.emptyrowset = Impossibile aggiungere un set di righe vuoto al JoinRowSet corrente
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Stato non valido
jdbcrowsetimpl.connect = JdbcRowSet (connessione): impossibile stabilire una connessione con JNDI
jdbcrowsetimpl.paramtype = Impossibile dedurre il tipo di parametro
jdbcrowsetimpl.matchcols = Le colonne di corrispondenza non coincidono con le colonne impostate
jdbcrowsetimpl.setmatchcols = Impostare le colonne di corrispondenza prima di recuperarle
jdbcrowsetimpl.matchcols1 = Le colonne di corrispondenza devono essere superiori a 0
jdbcrowsetimpl.matchcols2 = Le colonne di corrispondenza non possono essere una stringa vuota o nulla
jdbcrowsetimpl.unsetmatch = Le colonne rimosse non coincidono con le colonne impostate
jdbcrowsetimpl.usecolname = Utilizzare il nome di colonna come argomento per unsetMatchColumn
jdbcrowsetimpl.usecolid = Utilizzare l'ID di colonna come argomento per unsetMatchColumn
jdbcrowsetimpl.resnotupd = ResultSet non è aggiornabile
jdbcrowsetimpl.opnotysupp = Operazione attualmente non supportata
jdbcrowsetimpl.featnotsupp = Funzione non supportata
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) Impossibile stabilire una connessione
crsreader.paramtype = Impossibile dedurre il tipo di parametro
crsreader.connecterr = Errore interno in RowSetReader: nessuna connessione o comando
crsreader.datedetected = È stata rilevata una data
crsreader.caldetected = È stato rilevato un calendario
#CachedRowSetWriter exceptions
crswriter.connect = Impossibile stabilire una connessione
crswriter.tname = writeData non riesce a determinare il nome di tabella
crswriter.params1 = Valore dei parametri 1: {0}
crswriter.params2 = Valore dei parametri 2: {0}
crswriter.conflictsno = Conflitti durante la sincronizzazione
#InsertRow exceptions
insertrow.novalue = Non è stato inserito alcun valore
#SyncResolverImpl exceptions
syncrsimpl.indexval = Valore indice non compreso nell'intervallo
syncrsimpl.noconflict = Questa colonna non è in conflitto
syncrsimpl.syncnotpos = Impossibile eseguire la sincronizzazione
syncrsimpl.valtores = Il valore da risolvere può essere nel database o in cachedrowset
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Raggiunta la fine di RowSet. Posizione cursore non valida
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = **Errore di analisi: {0}, riga: {1}, URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0}
wrsxmlwriter.sqlex = SQLException: {0}
wrsxmlwriter.failedwrite = Impossibile scrivere il valore
wsrxmlwriter.notproper = Non un tipo corretto
#XmlReaderContentHandler exceptions
xmlrch.errmap = Errore durante l''impostazione della mappa: {0}
xmlrch.errmetadata = Errore durante l''impostazione dei metadati: {0}
xmlrch.errinsertval = Errore durante l''inserimento dei valori: {0}
xmlrch.errconstr = Errore durante la costruzione della riga: {0}
xmlrch.errdel = Errore durante l''eliminazione della riga: {0}
xmlrch.errinsert = Errore durante la costruzione della riga di inserimento: {0}
xmlrch.errinsdel = Errore durante la costruzione della riga insdel: {0}
xmlrch.errupdate = Errore durante la costruzione della riga di aggiornamento: {0}
xmlrch.errupdrow = Errore durante l''aggiornamento della riga: {0}
xmlrch.chars = caratteri:
xmlrch.badvalue = valore non valido; proprietà non annullabile
xmlrch.badvalue1 = valore non valido; metadati non annullabili
xmlrch.warning = **Avvertenza: {0}, riga: {1}, URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = La classificazione di blocco non è supportata
#RIXMLProvider exceptions
rixml.unsupp = Non supportato con RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = populateメソッドに無効なResultSetオブジェクトが使用されました
cachedrowsetimpl.invalidp = 無効な永続性プロバイダが生成されました
cachedrowsetimpl.nullhash = CachedRowSetImplインスタンスをインスタンス化できません。コンストラクタにnullのHashtableが使用されました
cachedrowsetimpl.invalidop = 挿入行での無効な操作
cachedrowsetimpl.accfailed = acceptChangesの失敗
cachedrowsetimpl.invalidcp = 無効なカーソル位置
cachedrowsetimpl.illegalop = 挿入されなかった行の不正な操作
cachedrowsetimpl.clonefail = クローンの失敗: {0}
cachedrowsetimpl.invalidcol = 無効な列索引
cachedrowsetimpl.invalcolnm = 無効な列名
cachedrowsetimpl.boolfail = 列{1}の値({0})でgetBooleanが失敗しました
cachedrowsetimpl.bytefail = 列{1}の値({0})でgetByteが失敗しました
cachedrowsetimpl.shortfail = 列{1}の値({0})でgetShortが失敗しました
cachedrowsetimpl.intfail = 列{1}の値({0})でgetIntが失敗しました
cachedrowsetimpl.longfail = 列{1}の値({0})でgetLongが失敗しました
cachedrowsetimpl.floatfail = 列{1}の値({0})でgetFloatが失敗しました
cachedrowsetimpl.doublefail = 列{1}の値({0})でgetDoubleが失敗しました
cachedrowsetimpl.dtypemismt = データ型の不一致
cachedrowsetimpl.datefail = 列{1}の値({0})でgetDateが失敗。変換できません
cachedrowsetimpl.timefail = 列{1}の値({0})でgetTimeが失敗。変換できません
cachedrowsetimpl.posupdate = 位置決めされた更新がサポートされません
cachedrowsetimpl.unableins = インスタンス化できない: {0}
cachedrowsetimpl.beforefirst = beforeFirst: 無効なカーソル操作
cachedrowsetimpl.first = First: 無効なカーソル操作
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: 無効なカーソル位置
cachedrowsetimpl.relative = relative: 無効なカーソル位置
cachedrowsetimpl.asciistream = asciiストリームの読込みが失敗しました
cachedrowsetimpl.binstream = バイナリ・ストリームの読込みが失敗しました
cachedrowsetimpl.failedins = 行の挿入に失敗
cachedrowsetimpl.updateins = 挿入行においてupdateRowが呼び出されました
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: メタデータなし
cachedrowsetimpl.movetoins2 = moveToInsertRow: 無効な列数
cachedrowsetimpl.tablename = 表名にnullは使用できません
cachedrowsetimpl.keycols = 無効なキー列
cachedrowsetimpl.opnotsupp = データベースでサポートされない操作
cachedrowsetimpl.matchcols = 一致列が列のセットと同じではありません
cachedrowsetimpl.setmatchcols = 一致列を取得する前に設定してください
cachedrowsetimpl.matchcols1 = 一致列は0より大きい必要があります
cachedrowsetimpl.matchcols2 = 一致列は空かnull文字列である必要があります
cachedrowsetimpl.unsetmatch = 設定解除されている列はセットと同じではありません
cachedrowsetimpl.unsetmatch1 = unsetMatchColumnへの引数として列名を使用してください
cachedrowsetimpl.unsetmatch2 = unsetMatchColumnへの引数として列IDを使用してください
cachedrowsetimpl.numrows = 行数がゼロまたはフェッチ・サイズより小さいです
cachedrowsetimpl.startpos = 開始位置を負にすることはできません
cachedrowsetimpl.nextpage = 呼出し前にデータを移入します
cachedrowsetimpl.pagesize = ページ・サイズをゼロより小さくすることはできません
cachedrowsetimpl.pagesize1 = ページ・サイズをmaxRowsより大きくすることができません
cachedrowsetimpl.fwdonly = ResultSetは順方向のみです
cachedrowsetimpl.type = タイプ: {0}
cachedrowsetimpl.opnotysupp = まだサポートされていない操作
cachedrowsetimpl.featnotsupp = サポートされていない機能
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = WebRowSetImplインスタンスをインスタンス化できません。コンストラクタにnullのHashtableが使用されました
webrowsetimpl.invalidwr = 無効なライター
webrowsetimpl.invalidrd = 無効なリーダー
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: 無効なカーソル操作
filteredrowsetimpl.absolute = absolute: 無効なカーソル操作
filteredrowsetimpl.notallowed = この値はフィルタで許容されません
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = 行セットのインスタンスではありません
joinrowsetimpl.matchnotset = 一致列が結合用に設定されていません
joinrowsetimpl.numnotequal = 行セットの要素数が一致列と等しくありません
joinrowsetimpl.notdefined = 定義された結合のタイプではありません
joinrowsetimpl.notsupported = このタイプの結合はサポートされていません
joinrowsetimpl.initerror = JoinRowSet初期化エラー
joinrowsetimpl.genericerr = 一般的なjoinrowset初期エラー
joinrowsetimpl.emptyrowset = このJoinRowSetに空の行セットを追加することはできません
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = 無効な状態
jdbcrowsetimpl.connect = JdbcRowSet (connect): JNDIが接続できません
jdbcrowsetimpl.paramtype = パラメータ・タイプを推定できません
jdbcrowsetimpl.matchcols = 一致列が列のセットと同じではありません
jdbcrowsetimpl.setmatchcols = 一致列を取得する前に設定してください
jdbcrowsetimpl.matchcols1 = 一致列は0より大きい必要があります
jdbcrowsetimpl.matchcols2 = 一致列を空またはnull文字列にすることはできません
jdbcrowsetimpl.unsetmatch = 設定解除されている列はセットと同じではありません
jdbcrowsetimpl.usecolname = unsetMatchColumnへの引数として列名を使用してください
jdbcrowsetimpl.usecolid = unsetMatchColumnへの引数として列IDを使用してください
jdbcrowsetimpl.resnotupd = ResultSetは更新できません
jdbcrowsetimpl.opnotysupp = まだサポートされていない操作
jdbcrowsetimpl.featnotsupp = サポートされていない機能
#CachedRowSetReader exceptions
crsreader.connect = (JNDI)接続できません
crsreader.paramtype = パラメータ・タイプを推定できません
crsreader.connecterr = RowSetReaderの内部エラー: 接続またはコマンドなし
crsreader.datedetected = 日付を検出しました
crsreader.caldetected = カレンダを検出しました
#CachedRowSetWriter exceptions
crswriter.connect = 接続を取得できません
crswriter.tname = writeDataが表名を判別できません
crswriter.params1 = params1の値: {0}
crswriter.params2 = params2の値: {0}
crswriter.conflictsno = 同期中に競合が発生します
#InsertRow exceptions
insertrow.novalue = 値は挿入されていません
#SyncResolverImpl exceptions
syncrsimpl.indexval = 範囲外の索引値
syncrsimpl.noconflict = この列は競合していません
syncrsimpl.syncnotpos = 同期できません
syncrsimpl.valtores = 解決される値はデータベースまたはcachedrowsetにある可能性があります
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = RowSetの最後に到達しました。無効なカーソル位置
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = **解析エラー: {0}、行: {1}、URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0}
wrsxmlwriter.sqlex = SQLException: {0}
wrsxmlwriter.failedwrite = 値の書込みに失敗しました
wsrxmlwriter.notproper = 適切なタイプではありません
#XmlReaderContentHandler exceptions
xmlrch.errmap = Map設定エラー: {0}
xmlrch.errmetadata = メタデータ設定エラー: {0}
xmlrch.errinsertval = 値の挿入エラー: {0}
xmlrch.errconstr = 行の生成エラー: {0}
xmlrch.errdel = 行の削除エラー: {0}
xmlrch.errinsert = 挿入行の生成エラー: {0}
xmlrch.errinsdel = insdel行の生成エラー: {0}
xmlrch.errupdate = 更新行の生成エラー: {0}
xmlrch.errupdrow = 行の更新エラー: {0}
xmlrch.chars = 文字:
xmlrch.badvalue = 不正な値: nullにできないプロパティ
xmlrch.badvalue1 = 不正な値: nullにできないメタデータ
xmlrch.warning = **警告: {0}、行: {1}、URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = ロックの分類はサポートされていません
#RIXMLProvider exceptions
rixml.unsupp = RIXMLProviderでは未サポート

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = 부적합한 ResultSet 객체가 제공되어 메소드를 채울 수 없습니다.
cachedrowsetimpl.invalidp = 부적합한 지속성 제공자가 생성되었습니다.
cachedrowsetimpl.nullhash = CachedRowSetImpl 인스턴스를 인스턴스화할 수 없습니다. 생성자에 널 Hashtable이 제공되었습니다.
cachedrowsetimpl.invalidop = 행을 삽입하는 중 부적합한 작업이 수행되었습니다.
cachedrowsetimpl.accfailed = acceptChanges를 실패했습니다.
cachedrowsetimpl.invalidcp = 커서 위치가 부적합합니다.
cachedrowsetimpl.illegalop = 삽입된 행이 아닌 행에서 잘못된 작업이 수행되었습니다.
cachedrowsetimpl.clonefail = 복제 실패: {0}
cachedrowsetimpl.invalidcol = 열 인덱스가 부적합합니다.
cachedrowsetimpl.invalcolnm = 열 이름이 부적합합니다.
cachedrowsetimpl.boolfail = {1} 열의 값({0})에서 getBoolen을 실패했습니다.
cachedrowsetimpl.bytefail = {1} 열의 값({0})에서 getByte를 실패했습니다.
cachedrowsetimpl.shortfail = {1} 열의 값({0})에서 getShort를 실패했습니다.
cachedrowsetimpl.intfail = {1} 열의 값({0})에서 getInt를 실패했습니다.
cachedrowsetimpl.longfail = {1} 열의 값({0})에서 getLong을 실패했습니다.
cachedrowsetimpl.floatfail = {1} 열의 값({0})에서 getFloat를 실패했습니다.
cachedrowsetimpl.doublefail = {1} 열의 값({0})에서 getDouble을 실패했습니다.
cachedrowsetimpl.dtypemismt = 데이터 유형이 일치하지 않습니다.
cachedrowsetimpl.datefail = {1} 열의 값({0})에서 getDate를 실패했습니다. 변환할 수 없습니다.
cachedrowsetimpl.timefail = {1} 열의 값({0})에서 getTime을 실패했습니다. 변환할 수 없습니다.
cachedrowsetimpl.posupdate = 위치가 지정된 업데이트가 지원되지 않습니다.
cachedrowsetimpl.unableins = 인스턴스화할 수 없음: {0}
cachedrowsetimpl.beforefirst = beforeFirst: 커서 작업이 부적합합니다.
cachedrowsetimpl.first = 처음: 커서 작업이 부적합합니다.
cachedrowsetimpl.last = 마지막: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = 절대: 커서 위치가 부적합합니다.
cachedrowsetimpl.relative = 상대: 커서 위치가 부적합합니다.
cachedrowsetimpl.asciistream = ASCII 스트림에 대한 읽기를 실패했습니다.
cachedrowsetimpl.binstream = 바이너리 스트림에서 읽기를 실패했습니다.
cachedrowsetimpl.failedins = 행 삽입을 실패했습니다.
cachedrowsetimpl.updateins = 행을 삽입하는 중 updateRow가 호출되었습니다.
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: 메타데이터가 없습니다.
cachedrowsetimpl.movetoins2 = moveToInsertRow: 열 수가 부적합합니다.
cachedrowsetimpl.tablename = 테이블 이름은 널일 수 없습니다.
cachedrowsetimpl.keycols = 키 열이 부적합합니다.
cachedrowsetimpl.opnotsupp = 데이터베이스에서 지원하지 않는 작업입니다.
cachedrowsetimpl.matchcols = 일치 열이 설정된 열과 동일하지 않습니다.
cachedrowsetimpl.setmatchcols = 일치 열을 설정한 후 가져오십시오.
cachedrowsetimpl.matchcols1 = 일치 열은 0개 이상이어야 합니다.
cachedrowsetimpl.matchcols2 = 일치 열은 비어 있거나 널 문자열이어야 합니다.
cachedrowsetimpl.unsetmatch = 설정을 해제하려는 열이 설정된 열과 다릅니다.
cachedrowsetimpl.unsetmatch1 = 열 이름을 unsetMatchColumn의 인수로 사용하십시오.
cachedrowsetimpl.unsetmatch2 = 열 ID를 unsetMatchColumn의 인수로 사용하십시오.
cachedrowsetimpl.numrows = 행 수가 0보다 작거나 인출 크기보다 작습니다.
cachedrowsetimpl.startpos = 시작 위치는 음수일 수 없습니다.
cachedrowsetimpl.nextpage = 호출하기 전에 데이터를 채우십시오.
cachedrowsetimpl.pagesize = 페이지 크기는 0보다 작을 수 없습니다.
cachedrowsetimpl.pagesize1 = 페이지 크기는 maxRows보다 클 수 없습니다.
cachedrowsetimpl.fwdonly = ResultSet는 전달 전용입니다.
cachedrowsetimpl.type = 유형: {0}
cachedrowsetimpl.opnotysupp = 작업이 아직 지원되지 않습니다.
cachedrowsetimpl.featnotsupp = 기능이 지원되지 않습니다.
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = WebRowSetImpl 인스턴스를 인스턴스화할 수 없습니다. 생성자에 널 Hashtable이 제공되었습니다.
webrowsetimpl.invalidwr = 기록 장치가 부적합합니다.
webrowsetimpl.invalidrd = 읽기 프로그램이 부적합합니다.
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = 상대: 커서 작업이 부적합합니다.
filteredrowsetimpl.absolute = 절대: 커서 작업이 부적합합니다.
filteredrowsetimpl.notallowed = 이 값은 필터를 통과할 수 없습니다.
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Rowset의 인스턴스가 아닙니다.
joinrowsetimpl.matchnotset = 조인할 일치 열이 설정되지 않았습니다.
joinrowsetimpl.numnotequal = Rowset의 요소 수가 일치 열과 같지 않습니다.
joinrowsetimpl.notdefined = 정의된 조인 유형이 아닙니다.
joinrowsetimpl.notsupported = 이 조인 유형은 지원되지 않습니다.
joinrowsetimpl.initerror = JoinRowSet 초기화 오류
joinrowsetimpl.genericerr = 일반 joinrowset 초기 오류
joinrowsetimpl.emptyrowset = 빈 rowset를 이 JoinRowSet에 추가할 수 없습니다.
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = 상태가 부적합합니다.
jdbcrowsetimpl.connect = JdbcRowSet(접속) JNDI가 접속할 수 없습니다.
jdbcrowsetimpl.paramtype = 매개변수 유형을 추론할 수 없습니다.
jdbcrowsetimpl.matchcols = 일치 열이 설정된 열과 동일하지 않습니다.
jdbcrowsetimpl.setmatchcols = 일치 열을 설정한 후 가져오십시오.
jdbcrowsetimpl.matchcols1 = 일치 열은 0개 이상이어야 합니다.
jdbcrowsetimpl.matchcols2 = 일치 열은 널 또는 빈 문자열일 수 없습니다.
jdbcrowsetimpl.unsetmatch = 설정을 해제하려는 열이 설정된 열과 다릅니다.
jdbcrowsetimpl.usecolname = 열 이름을 unsetMatchColumn의 인수로 사용하십시오.
jdbcrowsetimpl.usecolid = 열 ID를 unsetMatchColumn의 인수로 사용하십시오.
jdbcrowsetimpl.resnotupd = ResultSet를 업데이트할 수 없습니다.
jdbcrowsetimpl.opnotysupp = 작업이 아직 지원되지 않습니다.
jdbcrowsetimpl.featnotsupp = 기능이 지원되지 않습니다.
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) 접속할 수 없습니다.
crsreader.paramtype = 매개변수 유형을 추론할 수 없습니다.
crsreader.connecterr = RowSetReader에 내부 오류 발생: 접속 또는 명령이 없습니다.
crsreader.datedetected = 날짜를 감지함
crsreader.caldetected = 달력을 감지함
#CachedRowSetWriter exceptions
crswriter.connect = 접속할 수 없습니다.
crswriter.tname = writeData에서 테이블 이름을 확인할 수 없습니다.
crswriter.params1 = params1의 값: {0}
crswriter.params2 = params2의 값: {0}
crswriter.conflictsno = 동기화하는 중 충돌함
#InsertRow exceptions
insertrow.novalue = 값이 삽입되지 않았습니다.
#SyncResolverImpl exceptions
syncrsimpl.indexval = 인덱스 값이 범위를 벗어났습니다.
syncrsimpl.noconflict = 이 열은 충돌하지 않습니다.
syncrsimpl.syncnotpos = 동기화할 수 없습니다.
syncrsimpl.valtores = 분석할 값이 데이터베이스 또는 cachedrowset에 있을 수 있습니다.
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = RowSet의 끝에 도달했습니다. 커서 위치가 부적합합니다.
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** 구문분석 오류: {0}, 행: {1}, URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
wrsxmlwriter.sqlex = SQLException : {0}
wrsxmlwriter.failedwrite = 값 쓰기를 실패했습니다.
wsrxmlwriter.notproper = 적절한 유형이 아닙니다.
#XmlReaderContentHandler exceptions
xmlrch.errmap = 맵을 설정하는 중 오류 발생: {0}
xmlrch.errmetadata = 메타데이터를 설정하는 중 오류 발생: {0}
xmlrch.errinsertval = 값을 삽입하는 중 오류 발생: {0}
xmlrch.errconstr = 행을 생성하는 중 오류 발생: {0}
xmlrch.errdel = 행을 삭제하는 중 오류 발생: {0}
xmlrch.errinsert = insert 행을 생성하는 중 오류 발생: {0}
xmlrch.errinsdel = insdel 행을 생성하는 중 오류 발생: {0}
xmlrch.errupdate = update 행을 생성하는 중 오류 발생: {0}
xmlrch.errupdrow = 행을 업데이트하는 중 오류 발생: {0}
xmlrch.chars = 문자:
xmlrch.badvalue = 잘못된 값: 널일 수 없는 속성입니다.
xmlrch.badvalue1 = 잘못된 값: 널일 수 없는 메타데이터입니다.
xmlrch.warning = ** 경고: {0}, 행: {1}, URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = 분류 잠금이 지원되지 않습니다.
#RIXMLProvider exceptions
rixml.unsupp = RIXMLProvider에서 지원되지 않습니다.

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Objeto ResultSet inválido fornecido para preencher o método
cachedrowsetimpl.invalidp = Fornecedor de persistências inválido gerado
cachedrowsetimpl.nullhash = Não é possível instanciar a instância CachedRowSetImpl. Hashtable Nulo fornecido ao construtor
cachedrowsetimpl.invalidop = Operação inválida durante a inserção de linha
cachedrowsetimpl.accfailed = Falha em acceptChanges
cachedrowsetimpl.invalidcp = Posição inválida do cursor
cachedrowsetimpl.illegalop = Operação inválida em linha não inserida
cachedrowsetimpl.clonefail = Falha ao clonar: {0}
cachedrowsetimpl.invalidcol = Índice de coluna inválido
cachedrowsetimpl.invalcolnm = Nome de coluna inválido
cachedrowsetimpl.boolfail = Falha em getBoolen no valor ( {0} ) na coluna {1}
cachedrowsetimpl.bytefail = Falha em getByte no valor ( {0} ) na coluna {1}
cachedrowsetimpl.shortfail = Falha em getShort no valor ( {0} ) na coluna {1}
cachedrowsetimpl.intfail = Falha em getInt no valor ( {0} ) na coluna {1}
cachedrowsetimpl.longfail = Falha em getLong no valor ( {0} ) na coluna {1}
cachedrowsetimpl.floatfail = Falha em getFloat no valor ( {0} ) na coluna {1}
cachedrowsetimpl.doublefail = Falha em getDouble no valor ( {0} ) na coluna {1}
cachedrowsetimpl.dtypemismt = Tipo de Dados Incompatível
cachedrowsetimpl.datefail = Falha em getDate no valor ( {0} ) na coluna {1} sem conversão disponível
cachedrowsetimpl.timefail = Falha em getTime no valor ( {0} ) na coluna {1} sem conversão disponível
cachedrowsetimpl.posupdate = Atualizações posicionadas não suportadas
cachedrowsetimpl.unableins = Não é possível instanciar : {0}
cachedrowsetimpl.beforefirst = beforeFirst : Operação do cursor inválida
cachedrowsetimpl.first = First : Operação inválida do cursor
cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute : Posição inválida do cursor
cachedrowsetimpl.relative = relative : Posição inválida do cursor
cachedrowsetimpl.asciistream = falha na leitura do fluxo ascii
cachedrowsetimpl.binstream = falha na leitura do fluxo binário
cachedrowsetimpl.failedins = Falha ao inserir a linha
cachedrowsetimpl.updateins = updateRow chamado durante a inserção de linha
cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow : sem metadados
cachedrowsetimpl.movetoins2 = moveToInsertRow : número de colunas inválido
cachedrowsetimpl.tablename = O nome da tabela não pode ser nulo
cachedrowsetimpl.keycols = Colunas de chaves inválidas
cachedrowsetimpl.opnotsupp = Operação não suportada pelo Banco de Dados
cachedrowsetimpl.matchcols = As colunas correspondentes não são iguais às colunas definidas
cachedrowsetimpl.setmatchcols = Definir Colunas correspondentes antes de obtê-las
cachedrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
cachedrowsetimpl.matchcols2 = As colunas correspondentes devem ser strings vazias ou nulas
cachedrowsetimpl.unsetmatch = As colunas não definidas não são iguais às colunas definidas
cachedrowsetimpl.unsetmatch1 = Usar o nome da coluna como argumento para unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Usar o ID da coluna como argumento para unsetMatchColumn
cachedrowsetimpl.numrows = O número de linhas é menor do que zero ou menor do que o tamanho obtido
cachedrowsetimpl.startpos = A posição de início não pode ser negativa
cachedrowsetimpl.nextpage = Preencher dados antes de chamar
cachedrowsetimpl.pagesize = O tamanho da página não pode ser menor do que zero
cachedrowsetimpl.pagesize1 = O tamanho da página não pode ser maior do que maxRows
cachedrowsetimpl.fwdonly = ResultSet é somente para frente
cachedrowsetimpl.type = O tipo é : {0}
cachedrowsetimpl.opnotysupp = Operação ainda não suportada
cachedrowsetimpl.featnotsupp = Recurso não suportado
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = Não é possível instanciar a instância WebRowSetImpl. Hashtable nulo fornecido ao construtor
webrowsetimpl.invalidwr = Gravador inválido
webrowsetimpl.invalidrd = Leitor inválido
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative : Operação inválida do cursor
filteredrowsetimpl.absolute = absolute : Operação inválida do cursor
filteredrowsetimpl.notallowed = Este valor não é permitido no filtro
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Não é uma instância do conjunto de linhas
joinrowsetimpl.matchnotset = Coluna Correspondente não definida para junção
joinrowsetimpl.numnotequal = Número de elementos no conjunto de linhas diferente da coluna correspondente
joinrowsetimpl.notdefined = Não é um tipo definido de junção
joinrowsetimpl.notsupported = Este tipo de junção não é suportada
joinrowsetimpl.initerror = Erro de inicialização do JoinRowSet
joinrowsetimpl.genericerr = Erro inicial de joinrowset genérico
joinrowsetimpl.emptyrowset = O conjunto de linha vazio não pode ser adicionado a este JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Estado inválido
jdbcrowsetimpl.connect = Não é possível conectar JdbcRowSet (connect) a JNDI
jdbcrowsetimpl.paramtype = Não é possível deduzir o tipo de parâmetro
jdbcrowsetimpl.matchcols = As Colunas Correspondentes não são iguais às colunas definidas
jdbcrowsetimpl.setmatchcols = Definir as colunas correspondentes antes de obtê-las
jdbcrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
jdbcrowsetimpl.matchcols2 = As colunas correspondentes não podem ser strings vazias ou nulas
jdbcrowsetimpl.unsetmatch = As colunas não definidas não são iguais às colunas definidas
jdbcrowsetimpl.usecolname = Usar o nome da coluna como argumento para unsetMatchColumn
jdbcrowsetimpl.usecolid = Usar o ID da coluna como argumento para unsetMatchColumn
jdbcrowsetimpl.resnotupd = ResultSet não é atualizável
jdbcrowsetimpl.opnotysupp = Operação ainda não suportada
jdbcrowsetimpl.featnotsupp = Recurso não suportado
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) Não é possível conectar
crsreader.paramtype = Não é possível deduzir o tipo de parâmetro
crsreader.connecterr = Erro Interno no RowSetReader: sem conexão ou comando
crsreader.datedetected = Data Detectada
crsreader.caldetected = Calendário Detectado
#CachedRowSetWriter exceptions
crswriter.connect = Não é possível obter a conexão
crswriter.tname = writeData não pode determinar o nome da tabela
crswriter.params1 = Valor de params1 : {0}
crswriter.params2 = Valor de params2 : {0}
crswriter.conflictsno = conflitos durante a sincronização
#InsertRow exceptions
insertrow.novalue = Nenhum valor foi inserido
#SyncResolverImpl exceptions
syncrsimpl.indexval = Valor de índice fora da faixa
syncrsimpl.noconflict = Está coluna não está em conflito
syncrsimpl.syncnotpos = A sincronização não é possível
syncrsimpl.valtores = O valor a ser decidido pode estar no banco de dados ou no conjunto de linhas armazenado no cache
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Fim de RowSet atingido. Posição inválida do cursor
wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Erro de Parsing : {0} , linha : {1} , uri : {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
wrsxmlwriter.sqlex = SQLException : {0}
wrsxmlwriter.failedwrite = Falha ao gravar o valor
wsrxmlwriter.notproper = Não é um tipo adequado
#XmlReaderContentHandler exceptions
xmlrch.errmap = Erro ao definir o Mapa : {0}
xmlrch.errmetadata = Erro ao definir metadados : {0}
xmlrch.errinsertval = Erro ao inserir valores : {0}
xmlrch.errconstr = Erro ao construir a linha : {0}
xmlrch.errdel = Erro ao excluir a linha : {0}
xmlrch.errinsert = Erro ao construir a linha de inserção : {0}
xmlrch.errinsdel = Erro ao construir a linha insdel : {0}
xmlrch.errupdate = Erro ao construir a linha de atualização : {0}
xmlrch.errupdrow = Erro ao atualizar a linha : {0}
xmlrch.chars = caracteres :
xmlrch.badvalue = Valor incorreto ; propriedade não anulável
xmlrch.badvalue1 = Valor incorreto ; metadado não anulável
xmlrch.warning = ** Advertência : {0} , linha : {1} , uri : {2}
#RIOptimisticProvider Exceptions
riop.locking = O bloqueio de classificação não é suportado
#RIXMLProvider exceptions
rixml.unsupp = Não suportado com RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = Ifyllningsmetoden fick ett ogiltigt ResultSet-objekt
cachedrowsetimpl.invalidp = En ogiltig beständig leverantör genererades
cachedrowsetimpl.nullhash = Kan inte instansiera CachedRowSetImpl. Null-hashtabell skickades till konstruktor
cachedrowsetimpl.invalidop = En ogiltig åtgärd utfördes på infogad rad
cachedrowsetimpl.accfailed = acceptChanges utfördes inte
cachedrowsetimpl.invalidcp = Ogiltigt markörläge
cachedrowsetimpl.illegalop = En otillåten åtgärd utfördes på en icke infogad rad
cachedrowsetimpl.clonefail = Kloningen utfördes inte: {0}
cachedrowsetimpl.invalidcol = Ogiltigt kolumnindex
cachedrowsetimpl.invalcolnm = Ogiltigt kolumnnamn
cachedrowsetimpl.boolfail = getBoolen utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.bytefail = getByte utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.shortfail = getShort utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.intfail = getInt utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.longfail = getLong utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.floatfail = getFloat utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.doublefail = getDouble utfördes inte för värdet ({0}) i kolumnen {1}
cachedrowsetimpl.dtypemismt = Felmatchad datatyp
cachedrowsetimpl.datefail = getDate utfördes inte för värdet ({0}) i kolumnen {1}, ingen konvertering tillgänglig
cachedrowsetimpl.timefail = getTime utfördes inte för värdet ({0}) i kolumnen {1}, ingen konvertering tillgänglig
cachedrowsetimpl.posupdate = Det finns inte stöd för positionerad uppdatering
cachedrowsetimpl.unableins = Kan inte instansiera {0}
cachedrowsetimpl.beforefirst = beforeFirst: Ogiltig marköråtgärd
cachedrowsetimpl.first = First: Ogiltig marköråtgärd
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: Markörpositionen är ogiltig
cachedrowsetimpl.relative = relative: Markörpositionen är ogiltig
cachedrowsetimpl.asciistream = kunde inte läsa ASCII-strömmen
cachedrowsetimpl.binstream = kunde inte läsa den binära strömmen
cachedrowsetimpl.failedins = Kunde inte infoga rad
cachedrowsetimpl.updateins = updateRow anropades från infogad rad
cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: inga metadata
cachedrowsetimpl.movetoins2 = moveToInsertRow: ogiltigt antal kolumner
cachedrowsetimpl.tablename = Tabellnamnet kan inte vara null
cachedrowsetimpl.keycols = Ogiltiga nyckelkolumner
cachedrowsetimpl.opnotsupp = Databasen har inte stöd för denna åtgärd
cachedrowsetimpl.matchcols = Matchningskolumnerna är inte samma som de som ställts in
cachedrowsetimpl.setmatchcols = Ställ in matchningskolumnerna innan du hämtar dem
cachedrowsetimpl.matchcols1 = Matchningskolumnerna måste vara större än 0
cachedrowsetimpl.matchcols2 = Matchningskolumnerna måste vara tomma eller en null-sträng
cachedrowsetimpl.unsetmatch = Kolumnerna som återställs är inte samma som de som ställts in
cachedrowsetimpl.unsetmatch1 = Använd kolumnnamn som argument för unsetMatchColumn
cachedrowsetimpl.unsetmatch2 = Använd kolumn-id som argument för unsetMatchColumn
cachedrowsetimpl.numrows = Antalet rader understiger noll eller är mindre än hämtningsstorleken
cachedrowsetimpl.startpos = Startpositionen får inte vara negativ
cachedrowsetimpl.nextpage = Fyll i data innan anrop
cachedrowsetimpl.pagesize = Sidstorleken får inte understiga noll
cachedrowsetimpl.pagesize1 = Sidstorleken får inte överstiga maxRows
cachedrowsetimpl.fwdonly = ResultSet kan endast gå framåt
cachedrowsetimpl.type = Typ: {0}
cachedrowsetimpl.opnotysupp = Det finns ännu inget stöd för denna åtgärd
cachedrowsetimpl.featnotsupp = Funktionen stöds inte
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = Kan inte instansiera WebRowSetImpl. Null-hashtabell skickades till konstruktor.
webrowsetimpl.invalidwr = Ogiltig skrivfunktion
webrowsetimpl.invalidrd = Ogiltig läsare
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: Ogiltig marköråtgärd
filteredrowsetimpl.absolute = absolute: Ogiltig marköråtgärd
filteredrowsetimpl.notallowed = Detta värde kommer att filtreras bort
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = Detta är inte en instans av raduppsättning
joinrowsetimpl.matchnotset = Matchningskolumnen är inte inställd på koppling
joinrowsetimpl.numnotequal = Antal objekt i raduppsättning stämmer inte med matchningskolumnens
joinrowsetimpl.notdefined = Detta är inte någon definierad kopplingstyp
joinrowsetimpl.notsupported = Det finns inget stöd för denna kopplingstyp
joinrowsetimpl.initerror = Initieringsfel för JoinRowSet
joinrowsetimpl.genericerr = Allmänt initieringsfel för JoinRowSet
joinrowsetimpl.emptyrowset = Tomma raduppsättningar kan inte läggas till i denna JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = Ogiltigt tillstånd
jdbcrowsetimpl.connect = JdbcRowSet (anslut) JNDI kan inte anslutas
jdbcrowsetimpl.paramtype = Kan inte härleda parametertypen
jdbcrowsetimpl.matchcols = Matchningskolumnerna är inte samma som de som ställts in
jdbcrowsetimpl.setmatchcols = Ställ in matchningskolumnerna innan du hämtar dem
jdbcrowsetimpl.matchcols1 = Matchningskolumnerna måste vara större än 0
jdbcrowsetimpl.matchcols2 = Matchningskolumnerna kan inte vara en null-sträng eller tomma
jdbcrowsetimpl.unsetmatch = Kolumnerna som återställs är inte samma som de som ställts in
jdbcrowsetimpl.usecolname = Använd kolumnnamn som argument för unsetMatchColumn
jdbcrowsetimpl.usecolid = Använd kolumn-id som argument för unsetMatchColumn
jdbcrowsetimpl.resnotupd = ResultSet är inte uppdateringsbart
jdbcrowsetimpl.opnotysupp = Det finns ännu inget stöd för denna åtgärd
jdbcrowsetimpl.featnotsupp = Funktionen stöds inte
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) kan inte anslutas
crsreader.paramtype = Kan inte härleda parametertypen
crsreader.connecterr = Internt fel i RowSetReader: ingen anslutning eller inget kommando
crsreader.datedetected = Ett datum har identifierats
crsreader.caldetected = En kalender har identifierats
#CachedRowSetWriter exceptions
crswriter.connect = Kan inte upprätta anslutning
crswriter.tname = writeData kan inte fastställa tabellnamnet
crswriter.params1 = Parametervärde1: {0}
crswriter.params2 = Parametervärde2: {0}
crswriter.conflictsno = orsakar konflikt vid synkronisering
#InsertRow exceptions
insertrow.novalue = Inget värde har infogats
#SyncResolverImpl exceptions
syncrsimpl.indexval = Indexvärdet ligger utanför intervallet
syncrsimpl.noconflict = Kolumnen orsakar ingen konflikt
syncrsimpl.syncnotpos = Synkronisering är inte möjlig
syncrsimpl.valtores = Värdet som ska fastställas kan antingen finnas i databasen eller i cachedrowset
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Slutet på RowSet har nåtts. Markörpositionen är ogiltig.
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** Tolkningsfel: {0}, rad: {1}, URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0}
wrsxmlwriter.sqlex = SQLException: {0}
wrsxmlwriter.failedwrite = Kunde inte skriva värdet
wsrxmlwriter.notproper = Ingen riktig typ
#XmlReaderContentHandler exceptions
xmlrch.errmap = Ett fel inträffade vid inställning av mappning: {0}
xmlrch.errmetadata = Ett fel inträffade vid inställning av metadata: {0}
xmlrch.errinsertval = Ett fel inträffade vid infogning av värden: {0}
xmlrch.errconstr = Ett fel inträffade vid konstruktion av rad: {0}
xmlrch.errdel = Ett fel inträffade vid borttagning av rad: {0}
xmlrch.errinsert = Ett fel inträffade vid konstruktion av infogad rad: {0}
xmlrch.errinsdel = Ett fel inträffade vid konstruktion av insdel-rad: {0}
xmlrch.errupdate = Ett fel inträffade vid konstruktion av uppdateringsrad: {0}
xmlrch.errupdrow = Ett fel inträffade vid uppdatering av rad: {0}
xmlrch.chars = tecken:
xmlrch.badvalue = Felaktigt värde; egenskapen får inte ha värdet null
xmlrch.badvalue1 = Felaktigt värde; metadata får inte ha värdet null
xmlrch.warning = ** Varning! {0}, rad: {1}, URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = Det finns inte stöd för denna låsningsklassificering
#RIXMLProvider exceptions
rixml.unsupp = RIXMLProvider har inte stöd för detta

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = 提供给填充方法的 ResultSet 对象无效
cachedrowsetimpl.invalidp = 生成的持久性提供方无效
cachedrowsetimpl.nullhash = 无法实例化 CachedRowSetImpl 实例。提供给构造器的 Hashtable 为空值
cachedrowsetimpl.invalidop = 对插入行执行的操作无效
cachedrowsetimpl.accfailed = acceptChanges 失败
cachedrowsetimpl.invalidcp = 光标位置无效
cachedrowsetimpl.illegalop = 对非插入行执行的操作非法
cachedrowsetimpl.clonefail = 克隆失败: {0}
cachedrowsetimpl.invalidcol = 列索引无效
cachedrowsetimpl.invalcolnm = 列名无效
cachedrowsetimpl.boolfail = 对列 {1} 中的值 ({0}) 执行 getBoolen 失败
cachedrowsetimpl.bytefail = 对列 {1} 中的值 ({0}) 执行 getByte 失败
cachedrowsetimpl.shortfail = 对列 {1} 中的值 ({0}) 执行 getShort 失败
cachedrowsetimpl.intfail = 对列 {1} 中的值 ({0}) 执行 getInt 失败
cachedrowsetimpl.longfail = 对列 {1} 中的值 ({0}) 执行 getLong 失败
cachedrowsetimpl.floatfail = 对列 {1} 中的值 ({0}) 执行 getFloat 失败
cachedrowsetimpl.doublefail = 对列 {1} 中的值 ({0}) 执行 getDouble 失败
cachedrowsetimpl.dtypemismt = 数据类型不匹配
cachedrowsetimpl.datefail = 对列 {1} 中的值 ({0}) 执行 getDate 失败, 无可用转换
cachedrowsetimpl.timefail = 对列 {1} 中的值 ({0}) 执行 getTime 失败, 无可用转换
cachedrowsetimpl.posupdate = 不支持定位更新
cachedrowsetimpl.unableins = 无法实例化: {0}
cachedrowsetimpl.beforefirst = beforeFirst: 光标操作无效
cachedrowsetimpl.first = First: 光标操作无效
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: 光标位置无效
cachedrowsetimpl.relative = relative: 光标位置无效
cachedrowsetimpl.asciistream = 未能读取 ASCII 流
cachedrowsetimpl.binstream = 未能读取二进制流
cachedrowsetimpl.failedins = 对插入行执行操作失败
cachedrowsetimpl.updateins = 为插入行调用 updateRow
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: 无元数据
cachedrowsetimpl.movetoins2 = moveToInsertRow: 列数无效
cachedrowsetimpl.tablename = 表名不能为空值
cachedrowsetimpl.keycols = 关键字列无效
cachedrowsetimpl.opnotsupp = 操作不受数据库支持
cachedrowsetimpl.matchcols = 匹配列与设置的那些匹配列不同
cachedrowsetimpl.setmatchcols = 在获取匹配列之前先设置匹配列
cachedrowsetimpl.matchcols1 = 匹配列数应当大于 0
cachedrowsetimpl.matchcols2 = 匹配列数应当为空或空值字符串
cachedrowsetimpl.unsetmatch = 要取消设置的列与设置的列不同
cachedrowsetimpl.unsetmatch1 = 使用列名作为 unsetMatchColumn 的参数
cachedrowsetimpl.unsetmatch2 = 使用列 ID 作为 unsetMatchColumn 的参数
cachedrowsetimpl.numrows = 行数小于零或小于要提取的行数
cachedrowsetimpl.startpos = 起始位置不能为负数
cachedrowsetimpl.nextpage = 在调用之前先填充数据
cachedrowsetimpl.pagesize = 页面大小不能小于零
cachedrowsetimpl.pagesize1 = 页面大小不能大于 maxRows
cachedrowsetimpl.fwdonly = ResultSet 的类型为仅向前类型
cachedrowsetimpl.type = 类型为: {0}
cachedrowsetimpl.opnotysupp = 尚不支持该操作
cachedrowsetimpl.featnotsupp = 尚不支持该功能
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = 无法实例化 WebRowSetImpl 实例。提供给构造器的 Hashtable 为空值
webrowsetimpl.invalidwr = 写进程无效
webrowsetimpl.invalidrd = 读进程无效
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: 光标操作无效
filteredrowsetimpl.absolute = absolute: 光标操作无效
filteredrowsetimpl.notallowed = 不允许此值通过筛选器
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = 不是 RowSet 的实例
joinrowsetimpl.matchnotset = 未设置匹配列以进行联接
joinrowsetimpl.numnotequal = RowSet 中的元素个数不等于匹配列数
joinrowsetimpl.notdefined = 这不是定义的联接类型
joinrowsetimpl.notsupported = 不支持此联接类型
joinrowsetimpl.initerror = JoinRowSet 初始化错误
joinrowsetimpl.genericerr = 一般 joinrowset 初始错误
joinrowsetimpl.emptyrowset = 无法将空 RowSet 添加到此 JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = 状态无效
jdbcrowsetimpl.connect = JdbcRowSet (连接) JNDI 无法连接
jdbcrowsetimpl.paramtype = 无法推断参数类型
jdbcrowsetimpl.matchcols = 匹配列与设置的那些匹配列不同
jdbcrowsetimpl.setmatchcols = 在获取匹配列之前先设置匹配列
jdbcrowsetimpl.matchcols1 = 匹配列数应当大于 0
jdbcrowsetimpl.matchcols2 = 匹配列不能为空值或空字符串
jdbcrowsetimpl.unsetmatch = 要取消设置的列与设置的列不同
jdbcrowsetimpl.usecolname = 使用列名作为 unsetMatchColumn 的参数
jdbcrowsetimpl.usecolid = 使用列 ID 作为 unsetMatchColumn 的参数
jdbcrowsetimpl.resnotupd = ResultSet 不可更新
jdbcrowsetimpl.opnotysupp = 尚不支持该操作
jdbcrowsetimpl.featnotsupp = 尚不支持该功能
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) 无法连接
crsreader.paramtype = 无法推断参数类型
crsreader.connecterr = RowSetReader 中出现内部错误: 无连接或命令
crsreader.datedetected = 检测到日期
crsreader.caldetected = 检测到日历
#CachedRowSetWriter exceptions
crswriter.connect = 无法获取连接
crswriter.tname = writeData 无法确定表名
crswriter.params1 = params1 的值: {0}
crswriter.params2 = params2 的值: {0}
crswriter.conflictsno = 同步时发生冲突
#InsertRow exceptions
insertrow.novalue = 尚未插入任何值
#SyncResolverImpl exceptions
syncrsimpl.indexval = 索引值超出范围
syncrsimpl.noconflict = 此列不冲突
syncrsimpl.syncnotpos = 不能同步
syncrsimpl.valtores = 要解析的值可以在数据库中, 也可以在 CachedRowSet 中
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = 已到达 RowSet 的结尾。光标位置无效
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** 解析错误: {0}, 行: {1}, URI: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0}
wrsxmlwriter.sqlex = SQLException: {0}
wrsxmlwriter.failedwrite = 无法写入值
wsrxmlwriter.notproper = 类型不正确
#XmlReaderContentHandler exceptions
xmlrch.errmap = 设置映射时出错: {0}
xmlrch.errmetadata = 设置元数据时出错: {0}
xmlrch.errinsertval = 插入值时出错: {0}
xmlrch.errconstr = 构造行时出错: {0}
xmlrch.errdel = 删除行时出错: {0}
xmlrch.errinsert = 构造插入行时出错: {0}
xmlrch.errinsdel = 构造 insdel 行时出错: {0}
xmlrch.errupdate = 构造更新行时出错: {0}
xmlrch.errupdrow = 更新行时出错: {0}
xmlrch.chars = 字符:
xmlrch.badvalue = 值错误; 属性不可为空值
xmlrch.badvalue1 = 值错误; 元数据不可为空值
xmlrch.warning = ** 警告: {0}, 行: {1}, URI: {2}
#RIOptimisticProvider Exceptions
riop.locking = 不支持锁定分类
#RIXMLProvider exceptions
rixml.unsupp = 不支持 RIXMLProvider

View file

@ -0,0 +1,169 @@
#
# Copyright (c) 2005, 2024, 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.
#
# CacheRowSetImpl exceptions
cachedrowsetimpl.populate = 為植入方法提供的 ResultSet 物件無效
cachedrowsetimpl.invalidp = 產生的持續性提供者無效
cachedrowsetimpl.nullhash = 無法建立 CachedRowSetImpl 執行處理。為建構子提供的 Hashtable 為空值
cachedrowsetimpl.invalidop = 插入列時的作業無效
cachedrowsetimpl.accfailed = acceptChanges 失敗
cachedrowsetimpl.invalidcp = 游標位置無效
cachedrowsetimpl.illegalop = 非插入列上存在無效作業
cachedrowsetimpl.clonefail = 複製失敗: {0}
cachedrowsetimpl.invalidcol = 欄索引無效
cachedrowsetimpl.invalcolnm = 欄名無效
cachedrowsetimpl.boolfail = 對欄 {1} 中的值 ( {0} ) 執行 getBoolen 失敗
cachedrowsetimpl.bytefail = 對欄 {1} 中的值 ( {0} ) 執行 getByte 失敗
cachedrowsetimpl.shortfail = 對欄 {1} 中的值 ( {0} ) 執行 getShort 失敗
cachedrowsetimpl.intfail = 對欄 {1} 中的值 ( {0} ) 執行 getInt 失敗
cachedrowsetimpl.longfail = 對欄 {1} 中的值 ( {0} ) 執行 getLong 失敗
cachedrowsetimpl.floatfail = 對欄 {1} 中的值 ( {0} ) 執行 getFloat 失敗
cachedrowsetimpl.doublefail = 對欄 {1} 中的值 ( {0} ) 執行 getDouble 失敗
cachedrowsetimpl.dtypemismt = 資料類型不相符
cachedrowsetimpl.datefail = 對欄 {1} 中的值 ( {0} ) 執行 getDate 失敗,未進行轉換
cachedrowsetimpl.timefail = 對欄 {1} 中的值 ( {0} ) 執行 getTime 失敗,未進行轉換
cachedrowsetimpl.posupdate = 不支援定位的更新
cachedrowsetimpl.unableins = 無法建立: {0}
cachedrowsetimpl.beforefirst = beforeFirst: 游標作業無效
cachedrowsetimpl.first = First: 游標作業無效
cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: 游標位置無效
cachedrowsetimpl.relative = relative: 游標位置無效
cachedrowsetimpl.asciistream = 讀取 ascii 串流失敗
cachedrowsetimpl.binstream = 讀取二進位串流失敗
cachedrowsetimpl.failedins = 插入列失敗
cachedrowsetimpl.updateins = 插入列時呼叫 updateRow
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
cachedrowsetimpl.movetoins1 = moveToInsertRow: 沒有描述資料
cachedrowsetimpl.movetoins2 = moveToInsertRow: 欄數無效
cachedrowsetimpl.tablename = 表格名稱不能為空值
cachedrowsetimpl.keycols = 關鍵欄無效
cachedrowsetimpl.opnotsupp = 資料庫不支援作業
cachedrowsetimpl.matchcols = 匹配欄和設定的欄不同
cachedrowsetimpl.setmatchcols = 在取得匹配欄之前設定它們
cachedrowsetimpl.matchcols1 = 匹配欄應大於 0
cachedrowsetimpl.matchcols2 = 匹配欄應為空白字串或空值字串
cachedrowsetimpl.unsetmatch = 取消設定的欄和設定的欄不同
cachedrowsetimpl.unsetmatch1 = 使用欄名作為 unsetMatchColumn 的引數
cachedrowsetimpl.unsetmatch2 = 使用欄 ID 作為 unsetMatchColumn 的引數
cachedrowsetimpl.numrows = 列數小於零或小於擷取大小
cachedrowsetimpl.startpos = 起始位置不能為負數
cachedrowsetimpl.nextpage = 在呼叫之前植入資料
cachedrowsetimpl.pagesize = 頁面大小不能小於零
cachedrowsetimpl.pagesize1 = 頁面大小不能大於 maxRows
cachedrowsetimpl.fwdonly = ResultSet 只能向前進行
cachedrowsetimpl.type = 類型是: {0}
cachedrowsetimpl.opnotysupp = 尚不支援該作業
cachedrowsetimpl.featnotsupp = 不支援該功能
# WebRowSetImpl exceptions
webrowsetimpl.nullhash = 無法建立 WebRowSetImpl 執行處理。為建構子提供的 Hashtable 為空值
webrowsetimpl.invalidwr = 寫入器無效
webrowsetimpl.invalidrd = 讀取器無效
#FilteredRowSetImpl exceptions
filteredrowsetimpl.relative = relative: 游標作業無效
filteredrowsetimpl.absolute = absolute: 游標作業無效
filteredrowsetimpl.notallowed = 不允許此值通過篩選
#JoinRowSetImpl exceptions
joinrowsetimpl.notinstance = 不是 rowset 的執行處理
joinrowsetimpl.matchnotset = 未設定用於連結的匹配欄
joinrowsetimpl.numnotequal = rowset 中的元素數不等於匹配欄
joinrowsetimpl.notdefined = 這不是連結的已定義類型
joinrowsetimpl.notsupported = 不支援此類連結
joinrowsetimpl.initerror = JoinRowSet 初始化錯誤
joinrowsetimpl.genericerr = 一般的 joinrowset 初始化錯誤
joinrowsetimpl.emptyrowset = 無法將空 rowset 新增至此 JoinRowSet
#JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = 狀態無效
jdbcrowsetimpl.connect = JdbcRowSet (連線) JNDI 無法連線
jdbcrowsetimpl.paramtype = 無法推斷參數類型
jdbcrowsetimpl.matchcols = 匹配欄和設定的欄不同
jdbcrowsetimpl.setmatchcols = 要先設定匹配欄,才能取得它們
jdbcrowsetimpl.matchcols1 = 匹配欄應大於 0
jdbcrowsetimpl.matchcols2 = 匹配欄不能為空白字串或空值字串
jdbcrowsetimpl.unsetmatch = 取消設定的欄和設定的欄不同
jdbcrowsetimpl.usecolname = 使用欄名作為 unsetMatchColumn 的引數
jdbcrowsetimpl.usecolid = 使用欄 ID 作為 unsetMatchColumn 的引數
jdbcrowsetimpl.resnotupd = ResultSet 不可更新
jdbcrowsetimpl.opnotysupp = 尚不支援該作業
jdbcrowsetimpl.featnotsupp = 不支援該功能
#CachedRowSetReader exceptions
crsreader.connect = (JNDI) 無法連線
crsreader.paramtype = 無法推斷參數類型
crsreader.connecterr = RowSetReader 中出現內部錯誤: 無連線或命令
crsreader.datedetected = 偵測到日期
crsreader.caldetected = 偵測到行事曆
#CachedRowSetWriter exceptions
crswriter.connect = 無法取得連線
crswriter.tname = writeData 不能決定表格名稱
crswriter.params1 = params1 的值: {0}
crswriter.params2 = params2 的值: {0}
crswriter.conflictsno = 同步化時發生衝突
#InsertRow exceptions
insertrow.novalue = 尚未插入值
#SyncResolverImpl exceptions
syncrsimpl.indexval = 索引值超出範圍
syncrsimpl.noconflict = 此欄不衝突
syncrsimpl.syncnotpos = 不可能同步化
syncrsimpl.valtores = 要解析的值可位於資料庫或 cachedrowset 中
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp = 已到達 RowSet 結尾。游標位置無效
wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** 剖析錯誤: {0},行: {1},uri: {2}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0}
wrsxmlwriter.sqlex = SQLException : {0}
wrsxmlwriter.failedwrite = 寫入值失敗
wsrxmlwriter.notproper = 不是正確類型
#XmlReaderContentHandler exceptions
xmlrch.errmap = 設定對映時發生錯誤: {0}
xmlrch.errmetadata = 設定描述資料時發生錯誤: {0}
xmlrch.errinsertval = 插入值時發生錯誤: {0}
xmlrch.errconstr = 建構列時發生錯誤: {0}
xmlrch.errdel = 刪除列時發生錯誤: {0}
xmlrch.errinsert = 建構插入列時發生錯誤 : {0}
xmlrch.errinsdel = 建構 insdel 列時發生錯誤: {0}
xmlrch.errupdate = 建構更新列時發生錯誤: {0}
xmlrch.errupdrow = 更新列時發生錯誤: {0}
xmlrch.chars = 字元:
xmlrch.badvalue = 錯誤的值; 屬性不能為空值
xmlrch.badvalue1 = 錯誤的值; 描述資料不能為空值
xmlrch.warning = ** 警告: {0},行: {1},uri: {2}
#RIOptimisticProvider Exceptions
riop.locking = 不支援鎖定分類
#RIXMLProvider exceptions
rixml.unsupp = RIXMLProvider 不支援

View file

@ -0,0 +1,293 @@
/*
* Copyright (c) 2003, 2021, 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 com.sun.rowset;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.math.*;
import java.util.*;
import java.text.*;
import org.xml.sax.*;
import javax.sql.rowset.*;
import javax.sql.rowset.spi.*;
import com.sun.rowset.providers.*;
import com.sun.rowset.internal.*;
/**
* The standard implementation of the <code>WebRowSet</code> interface. See the interface
* definition for full behavior and implementation requirements.
*
* @author Jonathan Bruce, Amit Handa
*/
public class WebRowSetImpl extends CachedRowSetImpl implements WebRowSet {
/**
* The <code>WebRowSetXmlReader</code> object that this
* <code>WebRowSet</code> object will call when the method
* <code>WebRowSet.readXml</code> is invoked.
*/
private WebRowSetXmlReader xmlReader;
/**
* The <code>WebRowSetXmlWriter</code> object that this
* <code>WebRowSet</code> object will call when the method
* <code>WebRowSet.writeXml</code> is invoked.
*/
private WebRowSetXmlWriter xmlWriter;
/* This stores the cursor position prior to calling the writeXML.
* This variable is used after the write to restore the position
* to the point where the writeXml was called.
*/
private int curPosBfrWrite;
@SuppressWarnings("serial")
private SyncProvider provider;
/**
* Constructs a new <code>WebRowSet</code> object initialized with the
* default values for a <code>CachedRowSet</code> object instance. This
* provides the <code>RIOptimistic</code> provider to deliver
* synchronization capabilities to relational datastores and a default
* <code>WebRowSetXmlReader</code> object and a default
* <code>WebRowSetXmlWriter</code> object to enable XML output
* capabilities.
*
* @throws SQLException if an error occurs in configuring the default
* synchronization providers for relational and XML providers.
*/
public WebRowSetImpl() throws SQLException {
super();
// %%%
// Needs to use to SPI XmlReader,XmlWriters
//
xmlReader = new WebRowSetXmlReader();
xmlWriter = new WebRowSetXmlWriter();
}
/**
* Constructs a new <code>WebRowSet</code> object initialized with the
* synchronization SPI provider properties as specified in the <code>Hashtable</code>. If
* this hashtable is empty or is <code>null</code> the default constructor is invoked.
*
* @throws SQLException if an error occurs in configuring the specified
* synchronization providers for the relational and XML providers; or
* if the Hashtanle is null
*/
@SuppressWarnings("rawtypes")
public WebRowSetImpl(Hashtable env) throws SQLException {
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
if ( env == null) {
throw new SQLException(resBundle.handleGetObject("webrowsetimpl.nullhash").toString());
}
String providerName =
(String)env.get(javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER);
// set the Reader, this maybe overridden latter
provider = SyncFactory.getInstance(providerName);
// xmlReader = provider.getRowSetReader();
// xmlWriter = provider.getRowSetWriter();
}
/**
* Populates this <code>WebRowSet</code> object with the
* data in the given <code>ResultSet</code> object and writes itself
* to the given <code>java.io.Writer</code> object in XML format.
* This includes the rowset's data, properties, and metadata.
*
* @throws SQLException if an error occurs writing out the rowset
* contents to XML
*/
public void writeXml(ResultSet rs, java.io.Writer writer)
throws SQLException {
// WebRowSetImpl wrs = new WebRowSetImpl();
this.populate(rs);
// Store the cursor position before writing
curPosBfrWrite = this.getRow();
this.writeXml(writer);
}
/**
* Writes this <code>WebRowSet</code> object to the given
* <code>java.io.Writer</code> object in XML format. This
* includes the rowset's data, properties, and metadata.
*
* @throws SQLException if an error occurs writing out the rowset
* contents to XML
*/
public void writeXml(java.io.Writer writer) throws SQLException {
// %%%
// This will change to a XmlReader, which over-rides the default
// Xml that is used when a WRS is instantiated.
// WebRowSetXmlWriter xmlWriter = getXmlWriter();
if (xmlWriter != null) {
// Store the cursor position before writing
curPosBfrWrite = this.getRow();
xmlWriter.writeXML(this, writer);
} else {
throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
}
}
/**
* Reads this <code>WebRowSet</code> object in its XML format.
*
* @throws SQLException if a database access error occurs
*/
public void readXml(java.io.Reader reader) throws SQLException {
// %%%
// This will change to a XmlReader, which over-rides the default
// Xml that is used when a WRS is instantiated.
//WebRowSetXmlReader xmlReader = getXmlReader();
try {
if (reader != null) {
xmlReader.readXML(this, reader);
// Position is before the first row
// The cursor position is to be stored while serializng
// and deserializing the WebRowSet Object.
if(curPosBfrWrite == 0) {
this.beforeFirst();
}
// Return the position back to place prior to callin writeXml
else {
this.absolute(curPosBfrWrite);
}
} else {
throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
}
} catch (Exception e) {
throw new SQLException(e.getMessage());
}
}
// Stream based methods
/**
* Reads a stream based XML input to populate this <code>WebRowSet</code>
* object.
*
* @throws SQLException if a data source access error occurs
* @throws IOException if a IO exception occurs
*/
public void readXml(java.io.InputStream iStream) throws SQLException, IOException {
if (iStream != null) {
xmlReader.readXML(this, iStream);
// Position is before the first row
// The cursor position is to be stored while serializng
// and deserializing the WebRowSet Object.
if(curPosBfrWrite == 0) {
this.beforeFirst();
}
// Return the position back to place prior to callin writeXml
else {
this.absolute(curPosBfrWrite);
}
} else {
throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
}
}
/**
* Writes this <code>WebRowSet</code> object to the given <code> OutputStream</code>
* object in XML format.
* Creates an output stream of the internal state and contents of a
* <code>WebRowSet</code> for XML proceessing
*
* @throws SQLException if a datasource access error occurs
* @throws IOException if an IO exception occurs
*/
public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException {
if (xmlWriter != null) {
// Store the cursor position before writing
curPosBfrWrite = this.getRow();
xmlWriter.writeXML(this, oStream);
} else {
throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
}
}
/**
* Populates this <code>WebRowSet</code> object with the
* data in the given <code>ResultSet</code> object and writes itself
* to the given <code>java.io.OutputStream</code> object in XML format.
* This includes the rowset's data, properties, and metadata.
*
* @throws SQLException if a datasource access error occurs
* @throws IOException if an IO exception occurs
*/
public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException {
this.populate(rs);
// Store the cursor position before writing
curPosBfrWrite = this.getRow();
this.writeXml(oStream);
}
/**
* This method re populates the resBundle
* during the deserialization process
*
*/
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of transient Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID = -8771775154092422943L;
}

View file

@ -0,0 +1,102 @@
/*
* Copyright (c) 2003, 2021, 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 com.sun.rowset.internal;
import java.sql.*;
import java.io.*;
import java.util.Arrays;
/**
* The abstract base class from which the classes <code>Row</code>
* The class <code>BaseRow</code> stores
* a row's original values as an array of <code>Object</code>
* values, which can be retrieved with the method <code>getOrigRow</code>.
* This class also provides methods for getting and setting individual
* values in the row.
* <P>
* A row's original values are the values it contained before it was last
* modified. For example, when the <code>CachedRowSet</code>method
* <code>acceptChanges</code> is called, it will reset a row's original
* values to be the row's current values. Then, when the row is modified,
* the values that were previously the current values will become the row's
* original values (the values the row had immediately before it was modified).
* If a row has not been modified, its original values are its initial values.
* <P>
* Subclasses of this class contain more specific details, such as
* the conditions under which an exception is thrown or the bounds for
* index parameters.
*/
public abstract class BaseRow implements Serializable, Cloneable {
/**
* Specify the serialVersionUID
*/
private static final long serialVersionUID = 4152013523511412238L;
/**
* The array containing the original values for this <code>BaseRow</code>
* object.
* @serial
*/
@SuppressWarnings("serial") // Array component type is not Serializable
protected Object[] origVals;
/**
* Retrieves the values that this row contained immediately
* prior to its last modification.
*
* @return an array of <code>Object</code> values containing this row's
* original values
*/
public Object[] getOrigRow() {
Object[] origRow = this.origVals;
return (origRow == null) ? null: Arrays.copyOf(origRow, origRow.length);
}
/**
* Retrieves the array element at the given index, which is
* the original value of column number <i>idx</i> in this row.
*
* @param idx the index of the element to return
* @return the <code>Object</code> value at the given index into this
* row's array of original values
* @throws SQLException if there is an error
*/
public abstract Object getColumnObject(int idx) throws SQLException;
/**
* Sets the element at the given index into this row's array of
* original values to the given value. Implementations of the classes
* <code>Row</code> and determine what happens
* when the cursor is on the insert row and when it is on any other row.
*
* @param idx the index of the element to be set
* @param obj the <code>Object</code> to which the element at index
* <code>idx</code> to be set
* @throws SQLException if there is an error
*/
public abstract void setColumnObject(int idx, Object obj) throws SQLException;
}

View file

@ -0,0 +1,510 @@
/*
* Copyright (c) 2003, 2011, 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 com.sun.rowset.internal;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.io.*;
import java.lang.reflect.*;
import com.sun.rowset.*;
import javax.sql.rowset.*;
import javax.sql.rowset.spi.*;
/**
* The facility called by the <code>RIOptimisticProvider</code> object
* internally to read data into it. The calling <code>RowSet</code> object
* must have implemented the <code>RowSetInternal</code> interface
* and have the standard <code>CachedRowSetReader</code> object set as its
* reader.
* <P>
* This implementation always reads all rows of the data source,
* and it assumes that the <code>command</code> property for the caller
* is set with a query that is appropriate for execution by a
* <code>PreparedStatement</code> object.
* <P>
* Typically the <code>SyncFactory</code> manages the <code>RowSetReader</code> and
* the <code>RowSetWriter</code> implementations using <code>SyncProvider</code> objects.
* Standard JDBC RowSet implementations provide an object instance of this
* reader by invoking the <code>SyncProvider.getRowSetReader()</code> method.
*
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncProvider
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncFactoryException
*/
public class CachedRowSetReader implements RowSetReader, Serializable {
/**
* The field that keeps track of whether the writer associated with
* this <code>CachedRowSetReader</code> object's rowset has been called since
* the rowset was populated.
* <P>
* When this <code>CachedRowSetReader</code> object reads data into
* its rowset, it sets the field <code>writerCalls</code> to 0.
* When the writer associated with the rowset is called to write
* data back to the underlying data source, its <code>writeData</code>
* method calls the method <code>CachedRowSetReader.reset</code>,
* which increments <code>writerCalls</code> and returns <code>true</code>
* if <code>writerCalls</code> is 1. Thus, <code>writerCalls</code> equals
* 1 after the first call to <code>writeData</code> that occurs
* after the rowset has had data read into it.
*
* @serial
*/
private int writerCalls = 0;
private boolean userCon = false;
private int startPosition;
private JdbcRowSetResourceBundle resBundle;
public CachedRowSetReader() {
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Reads data from a data source and populates the given
* <code>RowSet</code> object with that data.
* This method is called by the rowset internally when
* the application invokes the method <code>execute</code>
* to read a new set of rows.
* <P>
* After clearing the rowset of its contents, if any, and setting
* the number of writer calls to <code>0</code>, this reader calls
* its <code>connect</code> method to make
* a connection to the rowset's data source. Depending on which
* of the rowset's properties have been set, the <code>connect</code>
* method will use a <code>DataSource</code> object or the
* <code>DriverManager</code> facility to make a connection to the
* data source.
* <P>
* Once the connection to the data source is made, this reader
* executes the query in the calling <code>CachedRowSet</code> object's
* <code>command</code> property. Then it calls the rowset's
* <code>populate</code> method, which reads data from the
* <code>ResultSet</code> object produced by executing the rowset's
* command. The rowset is then populated with this data.
* <P>
* This method's final act is to close the connection it made, thus
* leaving the rowset disconnected from its data source.
*
* @param caller a <code>RowSet</code> object that has implemented
* the <code>RowSetInternal</code> interface and had
* this <code>CachedRowSetReader</code> object set as
* its reader
* @throws SQLException if there is a database access error, there is a
* problem making the connection, or the command property has not
* been set
*/
public void readData(RowSetInternal caller) throws SQLException
{
Connection con = null;
try {
CachedRowSet crs = (CachedRowSet)caller;
// Get rid of the current contents of the rowset.
/**
* Checking added to verify whether page size has been set or not.
* If set then do not close the object as certain parameters need
* to be maintained.
*/
if(crs.getPageSize() == 0 && crs.size() >0 ) {
// When page size is not set,
// crs.size() will show the total no of rows.
crs.close();
}
writerCalls = 0;
// Get a connection. This reader assumes that the necessary
// properties have been set on the caller to let it supply a
// connection.
userCon = false;
con = this.connect(caller);
// Check our assumptions.
if (con == null || crs.getCommand() == null)
throw new SQLException(resBundle.handleGetObject("crsreader.connecterr").toString());
try {
con.setTransactionIsolation(crs.getTransactionIsolation());
} catch (Exception ex) {
;
}
// Use JDBC to read the data.
PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
// Pass any input parameters to JDBC.
decodeParams(caller.getParams(), pstmt);
try {
pstmt.setMaxRows(crs.getMaxRows());
pstmt.setMaxFieldSize(crs.getMaxFieldSize());
pstmt.setEscapeProcessing(crs.getEscapeProcessing());
pstmt.setQueryTimeout(crs.getQueryTimeout());
} catch (Exception ex) {
/*
* drivers may not support the above - esp. older
* drivers being used by the bridge..
*/
throw new SQLException(ex.getMessage());
}
if(crs.getCommand().toLowerCase().indexOf("select") != -1) {
// can be (crs.getCommand()).indexOf("select")) == 0
// because we will be getting resultset when
// it may be the case that some false select query with
// select coming in between instead of first.
// if ((crs.getCommand()).indexOf("?")) does not return -1
// implies a Prepared Statement like query exists.
ResultSet rs = pstmt.executeQuery();
if(crs.getPageSize() == 0){
crs.populate(rs);
}
else {
/**
* If page size has been set then create a ResultSet object that is scrollable using a
* PreparedStatement handle.Also call the populate(ResultSet,int) function to populate
* a page of data as specified by the page size.
*/
pstmt = con.prepareStatement(crs.getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
decodeParams(caller.getParams(), pstmt);
try {
pstmt.setMaxRows(crs.getMaxRows());
pstmt.setMaxFieldSize(crs.getMaxFieldSize());
pstmt.setEscapeProcessing(crs.getEscapeProcessing());
pstmt.setQueryTimeout(crs.getQueryTimeout());
} catch (Exception ex) {
/*
* drivers may not support the above - esp. older
* drivers being used by the bridge..
*/
throw new SQLException(ex.getMessage());
}
rs = pstmt.executeQuery();
crs.populate(rs,startPosition);
}
rs.close();
} else {
pstmt.executeUpdate();
}
// Get the data.
pstmt.close();
try {
con.commit();
} catch (SQLException ex) {
;
}
// only close connections we created...
if (getCloseConnection() == true)
con.close();
}
catch (SQLException ex) {
// Throw an exception if reading fails for any reason.
throw ex;
} finally {
try {
// only close connections we created...
if (con != null && getCloseConnection() == true) {
try {
if (!con.getAutoCommit()) {
con.rollback();
}
} catch (Exception dummy) {
/*
* not an error condition, we're closing anyway, but
* we'd like to clean up any locks if we can since
* it is not clear the connection pool will clean
* these connections in a timely manner
*/
}
con.close();
con = null;
}
} catch (SQLException e) {
// will get exception if something already went wrong, but don't
// override that exception with this one
}
}
}
/**
* Checks to see if the writer associated with this reader needs
* to reset its state. The writer will need to initialize its state
* if new contents have been read since the writer was last called.
* This method is called by the writer that was registered with
* this reader when components were being wired together.
*
* @return <code>true</code> if writer associated with this reader needs
* to reset the values of its fields; <code>false</code> otherwise
* @throws SQLException if an access error occurs
*/
public boolean reset() throws SQLException {
writerCalls++;
return writerCalls == 1;
}
/**
* Establishes a connection with the data source for the given
* <code>RowSet</code> object. If the rowset's <code>dataSourceName</code>
* property has been set, this method uses the JNDI API to retrieve the
* <code>DataSource</code> object that it can use to make the connection.
* If the url, username, and password properties have been set, this
* method uses the <code>DriverManager.getConnection</code> method to
* make the connection.
* <P>
* This method is used internally by the reader and writer associated with
* the calling <code>RowSet</code> object; an application never calls it
* directly.
*
* @param caller a <code>RowSet</code> object that has implemented
* the <code>RowSetInternal</code> interface and had
* this <code>CachedRowSetReader</code> object set as
* its reader
* @return a <code>Connection</code> object that represents a connection
* to the caller's data source
* @throws SQLException if an access error occurs
*/
public Connection connect(RowSetInternal caller) throws SQLException {
// Get a JDBC connection.
if (caller.getConnection() != null) {
// A connection was passed to execute(), so use it.
// As we are using a connection the user gave us we
// won't close it.
userCon = true;
return caller.getConnection();
}
else if (((RowSet)caller).getDataSourceName() != null) {
// Connect using JNDI.
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup
(((RowSet)caller).getDataSourceName());
// Check for username, password,
// if it exists try getting a Connection handle through them
// else try without these
// else throw SQLException
if(((RowSet)caller).getUsername() != null) {
return ds.getConnection(((RowSet)caller).getUsername(),
((RowSet)caller).getPassword());
} else {
return ds.getConnection();
}
}
catch (javax.naming.NamingException ex) {
SQLException sqlEx = new SQLException(resBundle.handleGetObject("crsreader.connect").toString());
sqlEx.initCause(ex);
throw sqlEx;
}
} else if (((RowSet)caller).getUrl() != null) {
// Connect using the driver manager.
return DriverManager.getConnection(((RowSet)caller).getUrl(),
((RowSet)caller).getUsername(),
((RowSet)caller).getPassword());
}
else {
return null;
}
}
/**
* Sets the parameter placeholders
* in the rowset's command (the given <code>PreparedStatement</code>
* object) with the parameters in the given array.
* This method, called internally by the method
* <code>CachedRowSetReader.readData</code>, reads each parameter, and
* based on its type, determines the correct
* <code>PreparedStatement.setXXX</code> method to use for setting
* that parameter.
*
* @param params an array of parameters to be used with the given
* <code>PreparedStatement</code> object
* @param pstmt the <code>PreparedStatement</code> object that is the
* command for the calling rowset and into which
* the given parameters are to be set
* @throws SQLException if an access error occurs
*/
@SuppressWarnings("deprecation")
private void decodeParams(Object[] params,
PreparedStatement pstmt) throws SQLException {
// There is a corresponding decodeParams in JdbcRowSetImpl
// which does the same as this method. This is a design flaw.
// Update the JdbcRowSetImpl.decodeParams when you update
// this method.
// Adding the same comments to JdbcRowSetImpl.decodeParams.
int arraySize;
Object[] param = null;
for (int i=0; i < params.length; i++) {
if (params[i] instanceof Object[]) {
param = (Object[])params[i];
if (param.length == 2) {
if (param[0] == null) {
pstmt.setNull(i + 1, ((Integer)param[1]).intValue());
continue;
}
if (param[0] instanceof java.sql.Date ||
param[0] instanceof java.sql.Time ||
param[0] instanceof java.sql.Timestamp) {
System.err.println(resBundle.handleGetObject("crsreader.datedetected").toString());
if (param[1] instanceof java.util.Calendar) {
System.err.println(resBundle.handleGetObject("crsreader.caldetected").toString());
pstmt.setDate(i + 1, (java.sql.Date)param[0],
(java.util.Calendar)param[1]);
continue;
}
else {
throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
}
}
if (param[0] instanceof Reader) {
pstmt.setCharacterStream(i + 1, (Reader)param[0],
((Integer)param[1]).intValue());
continue;
}
/*
* What's left should be setObject(int, Object, scale)
*/
if (param[1] instanceof Integer) {
pstmt.setObject(i + 1, param[0], ((Integer)param[1]).intValue());
continue;
}
} else if (param.length == 3) {
if (param[0] == null) {
pstmt.setNull(i + 1, ((Integer)param[1]).intValue(),
(String)param[2]);
continue;
}
if (param[0] instanceof java.io.InputStream) {
switch (((Integer)param[2]).intValue()) {
case CachedRowSetImpl.UNICODE_STREAM_PARAM:
pstmt.setUnicodeStream(i + 1,
(java.io.InputStream)param[0],
((Integer)param[1]).intValue());
break;
case CachedRowSetImpl.BINARY_STREAM_PARAM:
pstmt.setBinaryStream(i + 1,
(java.io.InputStream)param[0],
((Integer)param[1]).intValue());
break;
case CachedRowSetImpl.ASCII_STREAM_PARAM:
pstmt.setAsciiStream(i + 1,
(java.io.InputStream)param[0],
((Integer)param[1]).intValue());
break;
default:
throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
}
}
/*
* no point at looking at the first element now;
* what's left must be the setObject() cases.
*/
if (param[1] instanceof Integer && param[2] instanceof Integer) {
pstmt.setObject(i + 1, param[0], ((Integer)param[1]).intValue(),
((Integer)param[2]).intValue());
continue;
}
throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
} else {
// common case - this catches all SQL92 types
pstmt.setObject(i + 1, params[i]);
continue;
}
} else {
// Try to get all the params to be set here
pstmt.setObject(i + 1, params[i]);
}
}
}
/**
* Assists in determining whether the current connection was created by this
* CachedRowSet to ensure incorrect connections are not prematurely terminated.
*
* @return a boolean giving the status of whether the connection has been closed.
*/
protected boolean getCloseConnection() {
if (userCon == true)
return false;
return true;
}
/**
* This sets the start position in the ResultSet from where to begin. This is
* called by the Reader in the CachedRowSetImpl to set the position on the page
* to begin populating from.
* @param pos integer indicating the position in the <code>ResultSet</code> to begin
* populating from.
*/
public void setStartPosition(int pos){
startPosition = pos;
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID =5049738185801363801L;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,179 @@
/*
* Copyright (c) 2003, 2010, 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 com.sun.rowset.internal;
import com.sun.rowset.JdbcRowSetResourceBundle;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.util.*;
/**
* A class used internally to manage a <code>CachedRowSet</code> object's
* insert row. This class keeps track of the number of columns in the
* insert row and which columns have had a value inserted. It provides
* methods for retrieving a column value, setting a column value, and finding
* out whether the insert row is complete.
*/
public class InsertRow extends BaseRow implements Serializable, Cloneable {
/**
* An internal <code>BitSet</code> object used to keep track of the
* columns in this <code>InsertRow</code> object that have had a value
* inserted.
*/
private BitSet colsInserted;
/**
* The number of columns in this <code>InsertRow</code> object.
*/
private int cols;
private JdbcRowSetResourceBundle resBundle;
/**
* Creates an <code>InsertRow</code> object initialized with the
* given number of columns, an array for keeping track of the
* original values in this insert row, and a
* <code>BitSet</code> object with the same number of bits as
* there are columns.
*
* @param numCols an <code>int</code> indicating the number of columns
* in this <code>InsertRow</code> object
*/
public InsertRow(int numCols) {
origVals = new Object[numCols];
colsInserted = new BitSet(numCols);
cols = numCols;
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Sets the bit in this <code>InsertRow</code> object's internal
* <code>BitSet</code> object that corresponds to the specified column
* in this <code>InsertRow</code> object. Setting a bit indicates
* that a value has been set.
*
* @param col the number of the column to be marked as inserted;
* the first column is <code>1</code>
*/
protected void markColInserted(int col) {
colsInserted.set(col);
}
/**
* Indicates whether this <code>InsertRow</code> object has a value
* for every column that cannot be null.
* @param RowSetMD the <code>RowSetMetaData</code> object for the
* <code>CachedRowSet</code> object that maintains this
* <code>InsertRow</code> object
* @return <code>true</code> if this <code>InsertRow</code> object is
* complete; <code>false</code> otherwise
* @throws SQLException if there is an error accessing data
*/
public boolean isCompleteRow(RowSetMetaData RowSetMD) throws SQLException {
for (int i = 0; i < cols; i++) {
if (colsInserted.get(i) == false &&
RowSetMD.isNullable(i + 1) ==
ResultSetMetaData.columnNoNulls) {
return false;
}
}
return true;
}
/**
* Clears all the bits in the internal <code>BitSet</code> object
* maintained by this <code>InsertRow</code> object. Clearing all the bits
* indicates that none of the columns have had a value inserted.
*/
public void initInsertRow() {
for (int i = 0; i < cols; i++) {
colsInserted.clear(i);
}
}
/**
* Retrieves the value of the designated column in this
* <code>InsertRow</code> object. If no value has been inserted
* into the designated column, this method throws an
* <code>SQLException</code>.
*
* @param idx the column number of the value to be retrieved;
* the first column is <code>1</code>
* @throws SQLException if no value has been inserted into
* the designated column
*/
public Object getColumnObject(int idx) throws SQLException {
if (colsInserted.get(idx - 1) == false) {
throw new SQLException(resBundle.handleGetObject("insertrow.novalue").toString());
}
return (origVals[idx - 1]);
}
/**
* Sets the element in this <code>InsertRow</code> object's
* internal array of original values that corresponds to the
* designated column with the given value. If the third
* argument is <code>true</code>,
* which means that the cursor is on the insert row, this
* <code>InsertRow</code> object's internal <code>BitSet</code> object
* is set so that the bit corresponding to the column being set is
* turned on.
*
* @param idx the number of the column in the insert row to be set;
* the first column is <code>1</code>
* @param val the value to be set
*/
public void setColumnObject(int idx, Object val) {
origVals[idx - 1] = val;
markColInserted(idx - 1);
}
/**
* This method re populates the resBundle
* during the deserialization process
*
*/
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of transient Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID = 1066099658102869344L;
}

View file

@ -0,0 +1,342 @@
/*
* Copyright (c) 2003, 2021, 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 com.sun.rowset.internal;
import java.sql.*;
import java.io.*;
import java.lang.*;
import java.util.*;
/**
* A class that keeps track of a row's values. A <code>Row</code> object
* maintains an array of current column values and an array of original
* column values, and it provides methods for getting and setting the
* value of a column. It also keeps track of which columns have
* changed and whether the change was a delete, insert, or update.
* <P>
* Note that column numbers for rowsets start at <code>1</code>,
* whereas the first element of an array or bitset is <code>0</code>.
* The argument for the method <code>getColumnUpdated</code> refers to
* the column number in the rowset (the first column is <code>1</code>);
* the argument for <code>setColumnUpdated</code> refers to the index
* into the rowset's internal bitset (the first bit is <code>0</code>).
*/
public class Row extends BaseRow implements Serializable, Cloneable {
static final long serialVersionUID = 5047859032611314762L;
/**
* An array containing the current column values for this <code>Row</code>
* object.
* @serial
*/
@SuppressWarnings("serial") // Array component type is not Serializable
private Object[] currentVals;
/**
* A <code>BitSet</code> object containing a flag for each column in
* this <code>Row</code> object, with each flag indicating whether or
* not the value in the column has been changed.
* @serial
*/
private BitSet colsChanged;
/**
* A <code>boolean</code> indicating whether or not this <code>Row</code>
* object has been deleted. <code>true</code> indicates that it has
* been deleted; <code>false</code> indicates that it has not.
* @serial
*/
private boolean deleted;
/**
* A <code>boolean</code> indicating whether or not this <code>Row</code>
* object has been updated. <code>true</code> indicates that it has
* been updated; <code>false</code> indicates that it has not.
* @serial
*/
private boolean updated;
/**
* A <code>boolean</code> indicating whether or not this <code>Row</code>
* object has been inserted. <code>true</code> indicates that it has
* been inserted; <code>false</code> indicates that it has not.
* @serial
*/
private boolean inserted;
/**
* The number of columns in this <code>Row</code> object.
* @serial
*/
private int numCols;
/**
* Creates a new <code>Row</code> object with the given number of columns.
* The newly-created row includes an array of original values,
* an array for storing its current values, and a <code>BitSet</code>
* object for keeping track of which column values have been changed.
*/
public Row(int numCols) {
origVals = new Object[numCols];
currentVals = new Object[numCols];
colsChanged = new BitSet(numCols);
this.numCols = numCols;
}
/**
* Creates a new <code>Row</code> object with the given number of columns
* and with its array of original values initialized to the given array.
* The new <code>Row</code> object also has an array for storing its
* current values and a <code>BitSet</code> object for keeping track
* of which column values have been changed.
*/
public Row(int numCols, Object[] vals) {
origVals = new Object[numCols];
System.arraycopy(vals, 0, origVals, 0, numCols);
currentVals = new Object[numCols];
colsChanged = new BitSet(numCols);
this.numCols = numCols;
}
/**
*
* This method is called internally by the <code>CachedRowSet.populate</code>
* methods.
*
* @param idx the number of the column in this <code>Row</code> object
* that is to be set; the index of the first column is
* <code>1</code>
* @param val the new value to be set
*/
public void initColumnObject(int idx, Object val) {
origVals[idx - 1] = val;
}
/**
*
* This method is called internally by the <code>CachedRowSet.updateXXX</code>
* methods.
*
* @param idx the number of the column in this <code>Row</code> object
* that is to be set; the index of the first column is
* <code>1</code>
* @param val the new value to be set
*/
public void setColumnObject(int idx, Object val) {
currentVals[idx - 1] = val;
setColUpdated(idx - 1);
}
/**
* Retrieves the column value stored in the designated column of this
* <code>Row</code> object.
*
* @param columnIndex the index of the column value to be retrieved;
* the index of the first column is <code>1</code>
* @return an <code>Object</code> in the Java programming language that
* represents the value stored in the designated column
* @throws SQLException if there is a database access error
*/
public Object getColumnObject(int columnIndex) throws SQLException {
if (getColUpdated(columnIndex - 1)) {
return(currentVals[columnIndex - 1]); // maps to array!!
} else {
return(origVals[columnIndex - 1]); // maps to array!!
}
}
/**
* Indicates whether the designated column of this <code>Row</code> object
* has been changed.
* @param idx the index into the <code>BitSet</code> object maintained by
* this <code>Row</code> object to keep track of which column
* values have been modified; the index of the first bit is
* <code>0</code>
* @return <code>true</code> if the designated column value has been changed;
* <code>false</code> otherwise
*
*/
public boolean getColUpdated(int idx) {
return colsChanged.get(idx);
}
/**
* Sets this <code>Row</code> object's <code>deleted</code> field
* to <code>true</code>.
*
* @see #getDeleted
*/
public void setDeleted() { // %%% was public
deleted = true;
}
/**
* Retrieves the value of this <code>Row</code> object's <code>deleted</code> field,
* which will be <code>true</code> if one or more of its columns has been
* deleted.
* @return <code>true</code> if a column value has been deleted; <code>false</code>
* otherwise
*
* @see #setDeleted
*/
public boolean getDeleted() {
return(deleted);
}
/**
* Sets the <code>deleted</code> field for this <code>Row</code> object to
* <code>false</code>.
*/
public void clearDeleted() {
deleted = false;
}
/**
* Sets the value of this <code>Row</code> object's <code>inserted</code> field
* to <code>true</code>.
*
* @see #getInserted
*/
public void setInserted() {
inserted = true;
}
/**
* Retrieves the value of this <code>Row</code> object's <code>inserted</code> field,
* which will be <code>true</code> if this row has been inserted.
* @return <code>true</code> if this row has been inserted; <code>false</code>
* otherwise
*
* @see #setInserted
*/
public boolean getInserted() {
return(inserted);
}
/**
* Sets the <code>inserted</code> field for this <code>Row</code> object to
* <code>false</code>.
*/
public void clearInserted() { // %%% was public
inserted = false;
}
/**
* Retrieves the value of this <code>Row</code> object's
* <code>updated</code> field.
* @return <code>true</code> if this <code>Row</code> object has been
* updated; <code>false</code> if it has not
*
* @see #setUpdated
*/
public boolean getUpdated() {
return(updated);
}
/**
* Sets the <code>updated</code> field for this <code>Row</code> object to
* <code>true</code> if one or more of its column values has been changed.
*
* @see #getUpdated
*/
public void setUpdated() {
// only mark something as updated if one or
// more of the columns has been changed.
for (int i = 0; i < numCols; i++) {
if (getColUpdated(i) == true) {
updated = true;
return;
}
}
}
/**
* Sets the bit at the given index into this <code>Row</code> object's internal
* <code>BitSet</code> object, indicating that the corresponding column value
* (column <code>idx</code> + 1) has been changed.
*
* @param idx the index into the <code>BitSet</code> object maintained by
* this <code>Row</code> object; the first bit is at index
* <code>0</code>
*
*/
private void setColUpdated(int idx) {
colsChanged.set(idx);
}
/**
* Sets the <code>updated</code> field for this <code>Row</code> object to
* <code>false</code>, sets all the column values in this <code>Row</code>
* object's internal array of current values to <code>null</code>, and clears
* all of the bits in the <code>BitSet</code> object maintained by this
* <code>Row</code> object.
*/
public void clearUpdated() {
updated = false;
for (int i = 0; i < numCols; i++) {
currentVals[i] = null;
colsChanged.clear(i);
}
}
/**
* Sets the column values in this <code>Row</code> object's internal
* array of original values with the values in its internal array of
* current values, sets all the values in this <code>Row</code>
* object's internal array of current values to <code>null</code>,
* clears all the bits in this <code>Row</code> object's internal bitset,
* and sets its <code>updated</code> field to <code>false</code>.
* <P>
* This method is called internally by the <code>CachedRowSet</code>
* method <code>makeRowOriginal</code>.
*/
public void moveCurrentToOrig() {
for (int i = 0; i < numCols; i++) {
if (getColUpdated(i) == true) {
origVals[i] = currentVals[i];
currentVals[i] = null;
colsChanged.clear(i);
}
}
updated = false;
}
/**
* Returns the row on which the cursor is positioned.
*
* @return the <code>Row</code> object on which the <code>CachedRowSet</code>
* implementation objects's cursor is positioned
*/
public BaseRow getCurrentRow() {
return null;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,237 @@
/*
* Copyright (c) 2003, 2010, 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 com.sun.rowset.internal;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import com.sun.rowset.*;
import java.text.MessageFormat;
import javax.sql.rowset.*;
import javax.sql.rowset.spi.*;
/**
* An implementation of the <code>XmlReader</code> interface, which
* reads and parses an XML formatted <code>WebRowSet</code> object.
* This implementation uses an <code>org.xml.sax.Parser</code> object
* as its parser.
*/
public class WebRowSetXmlReader implements XmlReader, Serializable {
private JdbcRowSetResourceBundle resBundle;
public WebRowSetXmlReader(){
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Parses the given <code>WebRowSet</code> object, getting its input from
* the given <code>java.io.Reader</code> object. The parser will send
* notifications of parse events to the rowset's
* <code>XmlReaderDocHandler</code>, which will build the rowset as
* an XML document.
* <P>
* This method is called internally by the method
* <code>WebRowSet.readXml</code>.
* <P>
* If a parsing error occurs, the exception thrown will include
* information for locating the error in the original XML document.
*
* @param caller the <code>WebRowSet</code> object to be parsed, whose
* <code>xmlReader</code> field must contain a reference to
* this <code>XmlReader</code> object
* @param reader the <code>java.io.Reader</code> object from which
* the parser will get its input
* @exception SQLException if a database access error occurs or
* this <code>WebRowSetXmlReader</code> object is not the
* reader for the given rowset
* @see XmlReaderContentHandler
*/
public void readXML(WebRowSet caller, java.io.Reader reader) throws SQLException {
try {
// Crimson Parser(as in J2SE 1.4.1 is NOT able to handle
// Reader(s)(FileReader).
//
// But getting the file as a Stream works fine. So we are going to take
// the reader but send it as a InputStream to the parser. Note that this
// functionality needs to work against any parser
// Crimson(J2SE 1.4.x) / Xerces(J2SE 1.5.x).
InputSource is = new InputSource(reader);
DefaultHandler dh = new XmlErrorHandler();
XmlReaderContentHandler hndr = new XmlReaderContentHandler((RowSet)caller);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
SAXParser parser = factory.newSAXParser() ;
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
XMLReader reader1 = parser.getXMLReader() ;
reader1.setEntityResolver(new XmlResolver());
reader1.setContentHandler(hndr);
reader1.setErrorHandler(dh);
reader1.parse(is);
} catch (SAXParseException err) {
System.out.println (MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.parseerr").toString(), new Object[]{ err.getMessage (), err.getLineNumber(), err.getSystemId()}));
err.printStackTrace();
throw new SQLException(err.getMessage());
} catch (SAXException e) {
Exception x = e;
if (e.getException () != null)
x = e.getException();
x.printStackTrace ();
throw new SQLException(x.getMessage());
}
// Will be here if trying to write beyond the RowSet limits
catch (ArrayIndexOutOfBoundsException aie) {
throw new SQLException(resBundle.handleGetObject("wrsxmlreader.invalidcp").toString());
}
catch (Throwable e) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.readxml").toString() , e.getMessage()));
}
}
/**
* Parses the given <code>WebRowSet</code> object, getting its input from
* the given <code>java.io.InputStream</code> object. The parser will send
* notifications of parse events to the rowset's
* <code>XmlReaderDocHandler</code>, which will build the rowset as
* an XML document.
* <P>
* Using streams is a much faster way than using <code>java.io.Reader</code>
* <P>
* This method is called internally by the method
* <code>WebRowSet.readXml</code>.
* <P>
* If a parsing error occurs, the exception thrown will include
* information for locating the error in the original XML document.
*
* @param caller the <code>WebRowSet</code> object to be parsed, whose
* <code>xmlReader</code> field must contain a reference to
* this <code>XmlReader</code> object
* @param iStream the <code>java.io.InputStream</code> object from which
* the parser will get its input
* @throws SQLException if a database access error occurs or
* this <code>WebRowSetXmlReader</code> object is not the
* reader for the given rowset
* @see XmlReaderContentHandler
*/
public void readXML(WebRowSet caller, java.io.InputStream iStream) throws SQLException {
try {
InputSource is = new InputSource(iStream);
DefaultHandler dh = new XmlErrorHandler();
XmlReaderContentHandler hndr = new XmlReaderContentHandler((RowSet)caller);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
SAXParser parser = factory.newSAXParser() ;
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
XMLReader reader1 = parser.getXMLReader() ;
reader1.setEntityResolver(new XmlResolver());
reader1.setContentHandler(hndr);
reader1.setErrorHandler(dh);
reader1.parse(is);
} catch (SAXParseException err) {
System.out.println (MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.parseerr").toString(), new Object[]{err.getLineNumber(), err.getSystemId() }));
System.out.println(" " + err.getMessage ());
err.printStackTrace();
throw new SQLException(err.getMessage());
} catch (SAXException e) {
Exception x = e;
if (e.getException () != null)
x = e.getException();
x.printStackTrace ();
throw new SQLException(x.getMessage());
}
// Will be here if trying to write beyond the RowSet limits
catch (ArrayIndexOutOfBoundsException aie) {
throw new SQLException(resBundle.handleGetObject("wrsxmlreader.invalidcp").toString());
}
catch (Throwable e) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.readxml").toString() , e.getMessage()));
}
}
/**
* For code coverage purposes only right now
*
*/
public void readData(RowSetInternal caller) {
}
/**
* This method re populates the resBundle
* during the deserialization process
*
*/
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of transient Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID = -9127058392819008014L;
}

View file

@ -0,0 +1,680 @@
/*
* Copyright (c) 2003, 2022, 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 com.sun.rowset.internal;
import com.sun.rowset.JdbcRowSetResourceBundle;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.text.MessageFormat;
import java.util.*;
import javax.sql.rowset.*;
import javax.sql.rowset.spi.*;
/**
* An implementation of the {@code XmlWriter} interface, which writes a
* {@code WebRowSet} object to an output stream as an XML document.
*/
public class WebRowSetXmlWriter implements XmlWriter, Serializable {
/**
* The {@code java.io.Writer} object to which this {@code WebRowSetXmlWriter}
* object will write when its {@code writeXML} method is called. The value
* for this field is set with the {@code java.io.Writer} object given
* as the second argument to the {@code writeXML} method.
*/
private transient java.io.Writer writer;
/**
* The {@code java.util.Stack} object that this {@code WebRowSetXmlWriter}
* object will use for storing the tags to be used for writing the calling
* {@code WebRowSet} object as an XML document.
*/
private java.util.Stack<String> stack;
private JdbcRowSetResourceBundle resBundle;
public WebRowSetXmlWriter() {
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Writes the given {@code WebRowSet} object as an XML document
* using the given {@code java.io.Writer} object. The XML document
* will include the {@code WebRowSet} object's data, metadata, and
* properties. If a data value has been updated, that information is also
* included.
* <P>
* This method is called by the {@code XmlWriter} object that is
* referenced in the calling {@code WebRowSet} object's
* {@code xmlWriter} field. The {@code XmlWriter.writeXML}
* method passes to this method the arguments that were supplied to it.
*
* @param caller the {@code WebRowSet} object to be written; must
* be a rowset for which this {@code WebRowSetXmlWriter} object
* is the writer
* @param wrt the {@code java.io.Writer} object to which
* {@code caller} will be written
* @exception SQLException if a database access error occurs or
* this {@code WebRowSetXmlWriter} object is not the writer
* for the given rowset
* @see XmlWriter#writeXML
*/
public void writeXML(WebRowSet caller, java.io.Writer wrt)
throws SQLException {
// create a new stack for tag checking.
stack = new java.util.Stack<>();
writer = wrt;
writeRowSet(caller);
}
/**
* Writes the given {@code WebRowSet} object as an XML document
* using the given {@code java.io.OutputStream} object. The XML document
* will include the {@code WebRowSet} object's data, metadata, and
* properties. If a data value has been updated, that information is also
* included.
* <P>
* Using stream is a faster way than using {@code java.io.Writer}
*
* This method is called by the {@code XmlWriter} object that is
* referenced in the calling {@code WebRowSet} object's
* {@code xmlWriter} field. The {@code XmlWriter.writeXML}
* method passes to this method the arguments that were supplied to it.
*
* @param caller the {@code WebRowSet} object to be written; must
* be a rowset for which this {@code WebRowSetXmlWriter} object
* is the writer
* @param oStream the {@code java.io.OutputStream} object to which
* {@code caller} will be written
* @throws SQLException if a database access error occurs or
* this {@code WebRowSetXmlWriter} object is not the writer
* for the given rowset
* @see XmlWriter#writeXML
*/
public void writeXML(WebRowSet caller, java.io.OutputStream oStream)
throws SQLException {
// create a new stack for tag checking.
stack = new java.util.Stack<>();
writer = new OutputStreamWriter(oStream);
writeRowSet(caller);
}
/**
*
*
* @exception SQLException if a database access error occurs
*/
private void writeRowSet(WebRowSet caller) throws SQLException {
try {
startHeader();
writeProperties(caller);
writeMetaData(caller);
writeData(caller);
endHeader();
} catch (java.io.IOException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.ioex").toString(), ex.getMessage()));
}
}
private void startHeader() throws java.io.IOException {
setTag("webRowSet");
writer.write("<?xml version=\"1.0\"?>\n");
writer.write("<webRowSet xmlns=\"http://java.sun.com/xml/ns/jdbc\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
writer.write("xsi:schemaLocation=\"http://java.sun.com/xml/ns/jdbc http://java.sun.com/xml/ns/jdbc/webrowset.xsd\">\n");
}
private void endHeader() throws java.io.IOException {
endTag("webRowSet");
}
/**
*
*
* @exception SQLException if a database access error occurs
*/
private void writeProperties(WebRowSet caller) throws java.io.IOException {
beginSection("properties");
try {
propString("command", processSpecialCharacters(caller.getCommand()));
propInteger("concurrency", caller.getConcurrency());
propString("datasource", caller.getDataSourceName());
propBoolean("escape-processing",
caller.getEscapeProcessing());
try {
propInteger("fetch-direction", caller.getFetchDirection());
} catch(SQLException sqle) {
// it may be the case that fetch direction has not been set
// fetchDir == 0
// in that case it will throw a SQLException.
// To avoid that catch it here
}
propInteger("fetch-size", caller.getFetchSize());
propInteger("isolation-level",
caller.getTransactionIsolation());
beginSection("key-columns");
int[] kc = caller.getKeyColumns();
for (int i = 0; kc != null && i < kc.length; i++)
propInteger("column", kc[i]);
endSection("key-columns");
//Changed to beginSection and endSection for maps for proper indentation
beginSection("map");
Map<String, Class<?>> typeMap = caller.getTypeMap();
if(typeMap != null) {
for(Map.Entry<String, Class<?>> mm : typeMap.entrySet()) {
propString("type", mm.getKey());
propString("class", mm.getValue().getName());
}
}
endSection("map");
propInteger("max-field-size", caller.getMaxFieldSize());
propInteger("max-rows", caller.getMaxRows());
propInteger("query-timeout", caller.getQueryTimeout());
propBoolean("read-only", caller.isReadOnly());
int itype = caller.getType();
String strType = "";
if(itype == 1003) {
strType = "ResultSet.TYPE_FORWARD_ONLY";
} else if(itype == 1004) {
strType = "ResultSet.TYPE_SCROLL_INSENSITIVE";
} else if(itype == 1005) {
strType = "ResultSet.TYPE_SCROLL_SENSITIVE";
}
propString("rowset-type", strType);
propBoolean("show-deleted", caller.getShowDeleted());
propString("table-name", caller.getTableName());
propString("url", caller.getUrl());
beginSection("sync-provider");
// Remove the string after "@xxxx"
// before writing it to the xml file.
String strProviderInstance = (caller.getSyncProvider()).toString();
String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf('@'));
propString("sync-provider-name", strProvider);
propString("sync-provider-vendor", "Oracle Corporation");
propString("sync-provider-version", "1.0");
propInteger("sync-provider-grade", caller.getSyncProvider().getProviderGrade());
propInteger("data-source-lock", caller.getSyncProvider().getDataSourceLock());
endSection("sync-provider");
} catch (SQLException ex) {
throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
}
endSection("properties");
}
/**
*
*
* @exception SQLException if a database access error occurs
*/
private void writeMetaData(WebRowSet caller) throws java.io.IOException {
int columnCount;
beginSection("metadata");
try {
ResultSetMetaData rsmd = caller.getMetaData();
columnCount = rsmd.getColumnCount();
propInteger("column-count", columnCount);
for (int colIndex = 1; colIndex <= columnCount; colIndex++) {
beginSection("column-definition");
propInteger("column-index", colIndex);
propBoolean("auto-increment", rsmd.isAutoIncrement(colIndex));
propBoolean("case-sensitive", rsmd.isCaseSensitive(colIndex));
propBoolean("currency", rsmd.isCurrency(colIndex));
propInteger("nullable", rsmd.isNullable(colIndex));
propBoolean("signed", rsmd.isSigned(colIndex));
propBoolean("searchable", rsmd.isSearchable(colIndex));
propInteger("column-display-size",rsmd.getColumnDisplaySize(colIndex));
propString("column-label", rsmd.getColumnLabel(colIndex));
propString("column-name", rsmd.getColumnName(colIndex));
propString("schema-name", rsmd.getSchemaName(colIndex));
propInteger("column-precision", rsmd.getPrecision(colIndex));
propInteger("column-scale", rsmd.getScale(colIndex));
propString("table-name", rsmd.getTableName(colIndex));
propString("catalog-name", rsmd.getCatalogName(colIndex));
propInteger("column-type", rsmd.getColumnType(colIndex));
propString("column-type-name", rsmd.getColumnTypeName(colIndex));
endSection("column-definition");
}
} catch (SQLException ex) {
throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
}
endSection("metadata");
}
/**
*
*
* @exception SQLException if a database access error occurs
*/
private void writeData(WebRowSet caller) throws java.io.IOException {
ResultSet rs;
try {
ResultSetMetaData rsmd = caller.getMetaData();
int columnCount = rsmd.getColumnCount();
int i;
beginSection("data");
caller.beforeFirst();
caller.setShowDeleted(true);
while (caller.next()) {
if (caller.rowDeleted() && caller.rowInserted()) {
beginSection("modifyRow");
} else if (caller.rowDeleted()) {
beginSection("deleteRow");
} else if (caller.rowInserted()) {
beginSection("insertRow");
} else {
beginSection("currentRow");
}
for (i = 1; i <= columnCount; i++) {
if (caller.columnUpdated(i)) {
rs = caller.getOriginalRow();
rs.next();
beginTag("columnValue");
writeValue(i, (RowSet)rs);
endTag("columnValue");
beginTag("updateRow");
writeValue(i, caller);
endTag("updateRow");
} else {
beginTag("columnValue");
writeValue(i, caller);
endTag("columnValue");
}
}
endSection(); // this is unchecked
}
endSection("data");
} catch (SQLException ex) {
throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
}
}
private void writeValue(int idx, RowSet caller) throws java.io.IOException {
try {
int type = caller.getMetaData().getColumnType(idx);
switch (type) {
case java.sql.Types.BIT:
case java.sql.Types.BOOLEAN:
boolean b = caller.getBoolean(idx);
if (caller.wasNull())
writeNull();
else
writeBoolean(b);
break;
case java.sql.Types.TINYINT:
case java.sql.Types.SMALLINT:
short s = caller.getShort(idx);
if (caller.wasNull())
writeNull();
else
writeShort(s);
break;
case java.sql.Types.INTEGER:
int i = caller.getInt(idx);
if (caller.wasNull())
writeNull();
else
writeInteger(i);
break;
case java.sql.Types.BIGINT:
long l = caller.getLong(idx);
if (caller.wasNull())
writeNull();
else
writeLong(l);
break;
case java.sql.Types.REAL:
case java.sql.Types.FLOAT:
float f = caller.getFloat(idx);
if (caller.wasNull())
writeNull();
else
writeFloat(f);
break;
case java.sql.Types.DOUBLE:
double d = caller.getDouble(idx);
if (caller.wasNull())
writeNull();
else
writeDouble(d);
break;
case java.sql.Types.NUMERIC:
case java.sql.Types.DECIMAL:
writeBigDecimal(caller.getBigDecimal(idx));
break;
case java.sql.Types.BINARY:
case java.sql.Types.VARBINARY:
case java.sql.Types.LONGVARBINARY:
break;
case java.sql.Types.DATE:
java.sql.Date date = caller.getDate(idx);
if (caller.wasNull())
writeNull();
else
writeLong(date.getTime());
break;
case java.sql.Types.TIME:
java.sql.Time time = caller.getTime(idx);
if (caller.wasNull())
writeNull();
else
writeLong(time.getTime());
break;
case java.sql.Types.TIMESTAMP:
java.sql.Timestamp ts = caller.getTimestamp(idx);
if (caller.wasNull())
writeNull();
else
writeLong(ts.getTime());
break;
case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR:
writeStringData(caller.getString(idx));
break;
default:
System.out.println(resBundle.handleGetObject("wsrxmlwriter.notproper").toString());
//Need to take care of BLOB, CLOB, Array, Ref here
}
} catch (SQLException ex) {
throw new java.io.IOException(resBundle.handleGetObject("wrsxmlwriter.failedwrite").toString()+ ex.getMessage());
}
}
/*
* This begins a new tag with a indent
*
*/
private void beginSection(String tag) throws java.io.IOException {
// store the current tag
setTag(tag);
writeIndent(stack.size());
// write it out
writer.write("<" + tag + ">\n");
}
/*
* This closes a tag started by beginTag with a indent
*
*/
private void endSection(String tag) throws java.io.IOException {
writeIndent(stack.size());
String beginTag = getTag();
if(beginTag.indexOf("webRowSet") != -1) {
beginTag ="webRowSet";
}
if (tag.equals(beginTag) ) {
// get the current tag and write it out
writer.write("</" + beginTag + ">\n");
} else {
;
}
writer.flush();
}
private void endSection() throws java.io.IOException {
writeIndent(stack.size());
// get the current tag and write it out
String beginTag = getTag();
writer.write("</" + beginTag + ">\n");
writer.flush();
}
private void beginTag(String tag) throws java.io.IOException {
// store the current tag
setTag(tag);
writeIndent(stack.size());
// write tag out
writer.write("<" + tag + ">");
}
private void endTag(String tag) throws java.io.IOException {
String beginTag = getTag();
if (tag.equals(beginTag)) {
// get the current tag and write it out
writer.write("</" + beginTag + ">\n");
} else {
;
}
writer.flush();
}
private void emptyTag(String tag) throws java.io.IOException {
// write an emptyTag
writer.write("<" + tag + "/>");
}
private void setTag(String tag) {
// add the tag to stack
stack.push(tag);
}
private String getTag() {
return stack.pop();
}
private void writeNull() throws java.io.IOException {
emptyTag("null");
}
private void writeStringData(String s) throws java.io.IOException {
if (s == null) {
writeNull();
} else if (s.isEmpty()) {
writeEmptyString();
} else {
s = processSpecialCharacters(s);
writer.write(s);
}
}
private void writeString(String s) throws java.io.IOException {
if (s != null) {
writer.write(s);
} else {
writeNull();
}
}
private void writeShort(short s) throws java.io.IOException {
writer.write(Short.toString(s));
}
private void writeLong(long l) throws java.io.IOException {
writer.write(Long.toString(l));
}
private void writeInteger(int i) throws java.io.IOException {
writer.write(Integer.toString(i));
}
private void writeBoolean(boolean b) throws java.io.IOException {
writer.write(Boolean.toString(b));
}
private void writeFloat(float f) throws java.io.IOException {
writer.write(Float.toString(f));
}
private void writeDouble(double d) throws java.io.IOException {
writer.write(Double.toString(d));
}
private void writeBigDecimal(java.math.BigDecimal bd) throws java.io.IOException {
if (bd != null)
writer.write(bd.toString());
else
emptyTag("null");
}
private void writeIndent(int tabs) throws java.io.IOException {
// indent...
for (int i = 1; i < tabs; i++) {
writer.write(" ");
}
}
private void propString(String tag, String s) throws java.io.IOException {
beginTag(tag);
writeString(s);
endTag(tag);
}
private void propInteger(String tag, int i) throws java.io.IOException {
beginTag(tag);
writeInteger(i);
endTag(tag);
}
private void propBoolean(String tag, boolean b) throws java.io.IOException {
beginTag(tag);
writeBoolean(b);
endTag(tag);
}
private void writeEmptyString() throws java.io.IOException {
emptyTag("emptyString");
}
/**
* Purely for code coverage purposes..
*/
public boolean writeData(RowSetInternal caller) {
return false;
}
/**
* This function has been added for the processing of special characters
* like <,>,'," and & in the data to be serialized. These have to be taken
* of specifically or else there will be parsing error while trying to read
* the contents of the XML file.
**/
private String processSpecialCharacters(String s) {
if(s == null) {
return null;
}
char []charStr = s.toCharArray();
String specialStr = "";
for(int i = 0; i < charStr.length; i++) {
if(charStr[i] == '&') {
specialStr = specialStr.concat("&amp;");
} else if(charStr[i] == '<') {
specialStr = specialStr.concat("&lt;");
} else if(charStr[i] == '>') {
specialStr = specialStr.concat("&gt;");
} else if(charStr[i] == '\'') {
specialStr = specialStr.concat("&apos;");
} else if(charStr[i] == '\"') {
specialStr = specialStr.concat("&quot;");
} else {
specialStr = specialStr.concat(String.valueOf(charStr[i]));
}
}
s = specialStr;
return s;
}
/**
* This method re populates the resBundle
* during the deserialization process
*
*/
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of transient Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID = 7163134986189677641L;
}

View file

@ -0,0 +1,59 @@
/*
* Copyright (c) 2003, 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 com.sun.rowset.internal;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import com.sun.rowset.*;
import javax.sql.rowset.*;
/**
* An implementation of the <code>DefaultHandler</code> interface, which
* handles all the errors, fatalerrors and warnings while reading the xml file.
* This is the ErrorHandler which helps <code>WebRowSetXmlReader</code>
* to handle any errors while reading the xml data.
*/
public class XmlErrorHandler extends DefaultHandler {
public int errorCounter = 0;
public void error(SAXParseException e) throws SAXException {
errorCounter++;
}
public void fatalError(SAXParseException e) throws SAXException {
errorCounter++;
}
public void warning(SAXParseException exception) throws SAXException {
}
}

View file

@ -0,0 +1,56 @@
/*
* Copyright (c) 2003, 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 com.sun.rowset.internal;
import org.xml.sax.*;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
/**
* An implementation of the <code>EntityResolver</code> interface, which
* reads and parses an XML formatted <code>WebRowSet</code> object.
* This is an implementation of org.xml.sax
*
*/
public class XmlResolver implements EntityResolver {
public InputSource resolveEntity(String publicId, String systemId) {
String schemaName = systemId.substring(systemId.lastIndexOf('/'));
if(systemId.startsWith("http://java.sun.com/xml/ns/jdbc")) {
return new InputSource(this.getClass().getResourceAsStream(schemaName));
} else {
// use the default behaviour
return null;
}
}
}

View file

@ -0,0 +1,77 @@
/*
* Copyright (c) 2003, 2023, 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.
*/
/**
* Provides five standard implementations of the standard JDBC {@code RowSet} implementation
* interface definitions. These reference implementations are included with the J2SE version
* 1.5 platform and represent the benchmark standard {@code RowSet} implementations as verified
* by the Test Compatibility Kit (TCK) as mandated by the Java Community Process.
* <br>
*
* <h2>1.0 Available JDBC RowSet Reference Implementations </h2>
* The following implementations are provided:<br>
*
* <blockquote><b>{@code JdbcRowSetImpl}</b> - The {@code javax.sql.rowset.JdbcRowSet}
* interface reference implementation. <br>
* <br>
* <b>{@code CachedRowSetImpl}</b> - The {@code javax.sql.rowset.CachedRowSet} interface
* reference implementation.<br>
* <br>
* <b>{@code WebRowSetImpl}</b> - The {@code javax.sql.rowset.WebRowSet} interface
* reference implementation.<br>
* <br>
* <b>{@code FilteredRowSetImpl}</b> - The {@code javax.sql.rowset.FilteredRowSet}
* interface reference implementation.<br>
* <br>
* <b>{@code JoinRowSetImpl}</b> - The {@code javax.sql.rowset.JoinRowSet} interface
* reference implementation.<br>
* </blockquote>
*
* All details on their expected behavior, including their interactions with the {@code SyncProvider}
* SPI and helper classes are provided in the interface definitions in the {@code javax.sql.rowset}
* package specification.<br>
*
* <h2>2.0 Usage</h2>
* The reference implementations represent robust implementations of the standard
* {@code RowSet} interfaces defined in the {@code javax.sql.rowset} package.
* All disconnected {@code RowSet} implementations, such as the {@code CachedRowSetImpl}
* and {@code WebRowSetImpl}, are flexible enough to use the {@code SyncFactory} SPIs to
* leverage non-reference implementation {@code SyncProvider} implementations to obtain
* differing synchronization semantics. Furthermore, developers and vendors alike are free
* to use these implementations and integrate them into their products just as they
* can with to other components of the Java platform.<br>
*
* <h2>3.0 Extending the JDBC RowSet Implementations</h2>
*
* The JDBC {@code RowSet} reference implementations are provided as non-final
* classes so that any developer can extend them to provide additional features
* while maintaining the core required standard functionality and compatibility. It
* is anticipated that many vendors and developers will extend the standard feature
* set to their particular needs. The website for JDBC Technology will
* provider a portal where implementations can be listed, similar to the way it
* provides a site for JDBC drivers.
* @since 1.5
*/
package com.sun.rowset;

View file

@ -0,0 +1,262 @@
/*
* Copyright (c) 2003, 2022, 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 com.sun.rowset.providers;
import com.sun.rowset.JdbcRowSetResourceBundle;
import javax.sql.*;
import java.io.*;
import javax.sql.rowset.spi.*;
import com.sun.rowset.internal.*;
/**
* The reference implementation of a JDBC Rowset synchronization provider
* providing optimistic synchronization with a relational datastore
* using any JDBC technology-enabled driver.
*
* <h2>1.0 Background</h2>
* This synchronization provider is registered with the
* <code>SyncFactory</code> by default as the
* <code>com.sun.rowset.providers.RIOptimisticProvider</code>.
* As an extension of the <code>SyncProvider</code> abstract
* class, it provides the reader and writer classes required by disconnected
* rowsets as <code>javax.sql.RowSetReader</code> and <code>javax.sql.RowSetWriter</code>
* interface implementations. As a reference implementation,
* <code>RIOptimisticProvider</code> provides a
* fully functional implementation offering a medium grade classification of
* synchronization, namely GRADE_CHECK_MODIFIED_AT_COMMIT. A
* disconnected <code>RowSet</code> implementation using the
* <code>RIOptimisticProvider</code> can expect the writer to
* check only rows that have been modified in the <code>RowSet</code> against
* the values in the data source. If there is a conflict, that is, if a value
* in the data source has been changed by another party, the
* <code>RIOptimisticProvider</code> will not write any of the changes to the data
* source and will throw a <code>SyncProviderException</code> object.
*
* <h2>2.0 Usage</h2>
* Standard disconnected <code>RowSet</code> implementations may opt to use this
* <code>SyncProvider</code> implementation in one of two ways:
* <OL>
* <LI>By specifically calling the <code>setSyncProvider</code> method
defined in the <code>CachedRowSet</code> interface
* <pre>
* CachedRowset crs = new FooCachedRowSetImpl();
* crs.setSyncProvider("com.sun.rowset.providers.RIOptimisticProvider");
* </pre>
* <LI>By specifying it in the constructor of the <code>RowSet</code>
* implementation
* <pre>
* CachedRowset crs = new FooCachedRowSetImpl(
* "com.sun.rowset.providers.RIOptimisticProvider");
* </pre>
* </OL>
* Note that because the <code>RIOptimisticProvider</code> implementation is
* the default provider, it will always be the provider when no provider ID is
* specified to the constructor.
* <P>
* See the standard <code>RowSet</code> reference implementations in the
* <code>com.sun.rowset</code> package for more details.
*
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncProvider
* @see javax.sql.rowset.spi.SyncProviderException
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncFactoryException
*
*/
public final class RIOptimisticProvider extends SyncProvider implements Serializable {
private CachedRowSetReader reader;
private CachedRowSetWriter writer;
/**
* The unique provider identifier.
*/
private String providerID = "com.sun.rowset.providers.RIOptimisticProvider";
/**
* The vendor name of this SyncProvider implementation
*/
private String vendorName = "Oracle Corporation";
/**
* The version number of this SyncProvider implementation
*/
private String versionNumber = "1.0";
/**
* ResourceBundle
*/
private JdbcRowSetResourceBundle resBundle;
/**
* Creates an <code>RIOptimisticProvider</code> object initialized with the
* fully qualified class name of this <code>SyncProvider</code> implementation
* and a default reader and writer.
* <P>
* This provider is available to all disconnected <code>RowSet</code> implementations
* as the default persistence provider.
*/
public RIOptimisticProvider() {
providerID = this.getClass().getName();
reader = new CachedRowSetReader();
writer = new CachedRowSetWriter();
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Returns the <code>'javax.sql.rowset.providers.RIOptimisticProvider'</code>
* provider identification string.
*
* @return String Provider ID of this persistence provider
*/
public String getProviderID() {
return providerID;
}
/**
* Returns the <code>javax.sql.RowSetWriter</code> object for this
* <code>RIOptimisticProvider</code> object. This is the writer that will
* write changes made to the <code>Rowset</code> object back to the data source.
*
* @return the <code>javax.sql.RowSetWriter</code> object for this
* <code>RIOptimisticProvider</code> object
*/
public RowSetWriter getRowSetWriter() {
try {
writer.setReader(reader);
} catch (java.sql.SQLException e) {}
return writer;
}
/**
* Returns the <code>javax.sql.RowSetReader</code> object for this
* <code>RIOptimisticProvider</code> object. This is the reader that will
* populate a <code>RowSet</code> object using this <code>RIOptimisticProvider</code>.
*
* @return the <code>javax.sql.RowSetReader</code> object for this
* <code>RIOptimisticProvider</code> object
*/
public RowSetReader getRowSetReader() {
return reader;
}
/**
* Returns the <code>SyncProvider</code> grade of synchronization that
* <code>RowSet</code> objects can expect when using this
* implementation. As an optimistic synchronization provider, the writer
* will only check rows that have been modified in the <code>RowSet</code>
* object.
*/
public int getProviderGrade() {
return SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT;
}
/**
* Modifies the data source lock severity according to the standard
* <code>SyncProvider</code> classifications.
*
* @param datasource_lock An <code>int</code> indicating the level of locking to be
* set; must be one of the following constants:
* <PRE>
* SyncProvider.DATASOURCE_NO_LOCK,
* SyncProvider.DATASOURCE_ROW_LOCK,
* SyncProvider.DATASOURCE_TABLE_LOCK,
* SyncProvider.DATASOURCE_DB_LOCk
* </PRE>
* @throws SyncProviderException if the parameter specified is not
* <code>SyncProvider.DATASOURCE_NO_LOCK</code>
*/
public void setDataSourceLock(int datasource_lock) throws SyncProviderException {
if(datasource_lock != SyncProvider.DATASOURCE_NO_LOCK ) {
throw new SyncProviderException(resBundle.handleGetObject("riop.locking").toString());
}
}
/**
* Returns the active data source lock severity in this
* reference implementation of the <code>SyncProvider</code>
* abstract class.
*
* @return <code>SyncProvider.DATASOURCE_NO_LOCK</code>.
* The reference implementation does not support data source locks.
*/
public int getDataSourceLock() throws SyncProviderException {
return SyncProvider.DATASOURCE_NO_LOCK;
}
/**
* Returns the supported updatable view abilities of the
* reference implementation of the <code>SyncProvider</code>
* abstract class.
*
* @return <code>SyncProvider.NONUPDATABLE_VIEW_SYNC</code>. The
* the reference implementation does not support updating tables
* that are the source of a view.
*/
public int supportsUpdatableView() {
return SyncProvider.NONUPDATABLE_VIEW_SYNC;
}
/**
* Returns the release version ID of the Reference Implementation Optimistic
* Synchronization Provider.
*
* @return the <code>String</code> detailing the version number of this SyncProvider
*/
public String getVersion() {
return this.versionNumber;
}
/**
* Returns the vendor name of the Reference Implementation Optimistic
* Synchronization Provider
*
* @return the <code>String</code> detailing the vendor name of this
* SyncProvider
*/
public String getVendor() {
return this.vendorName;
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Default state initialization happens here
ois.defaultReadObject();
// Initialization of transient Res Bundle happens here .
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
static final long serialVersionUID =-3143367176751761936L;
}

View file

@ -0,0 +1,248 @@
/*
* Copyright (c) 2003, 2022, 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 com.sun.rowset.providers;
import com.sun.rowset.JdbcRowSetResourceBundle;
import java.io.IOException;
import java.sql.*;
import javax.sql.*;
import javax.sql.rowset.spi.*;
/**
* A reference implementation of a JDBC RowSet synchronization provider
* with the ability to read and write rowsets in well formed XML using the
* standard WebRowSet schema.
*
* <h2>1.0 Background</h2>
* This synchronization provider is registered with the
* <code>SyncFactory</code> by default as the
* <code>com.sun.rowset.providers.RIXMLProvider</code>.
* <P>
* A <code>WebRowSet</code> object uses an <code>RIXMLProvider</code> implementation
* to read an XML data source or to write itself in XML format using the
* <code>WebRowSet</code> XML schema definition available at
* <pre>
* <a href="http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd">http://xmlns.jcp.org/xml/ns//jdbc/webrowset.xsd</a>
* </pre>
* The <code>RIXMLProvider</code> implementation has a synchronization level of
* GRADE_NONE, which means that it does no checking at all for conflicts. It
* simply writes a <code>WebRowSet</code> object to a file.
* <h2>2.0 Usage</h2>
* A <code>WebRowSet</code> implementation is created with an <code>RIXMLProvider</code>
* by default.
* <pre>
* WebRowSet wrs = new FooWebRowSetImpl();
* </pre>
* The <code>SyncFactory</code> always provides an instance of
* <code>RIOptimisticProvider</code> when no provider is specified,
* but the implementation of the default constructor for <code>WebRowSet</code> sets the
* provider to be the <code>RIXMLProvider</code> implementation. Therefore,
* the following line of code is executed behind the scenes as part of the
* implementation of the default constructor.
* <pre>
* wrs.setSyncProvider("com.sun.rowset.providers.RIXMLProvider");
* </pre>
* See the standard <code>RowSet</code> reference implementations in the
* <code>com.sun.rowset</code> package for more details.
*
* @author Jonathan Bruce
* @see javax.sql.rowset.spi.SyncProvider
* @see javax.sql.rowset.spi.SyncProviderException
* @see javax.sql.rowset.spi.SyncFactory
* @see javax.sql.rowset.spi.SyncFactoryException
*/
public final class RIXMLProvider extends SyncProvider {
/**
* The unique provider identifier.
*/
private String providerID = "com.sun.rowset.providers.RIXMLProvider";
/**
* The vendor name of this SyncProvider implementation.
*/
private String vendorName = "Oracle Corporation";
/**
* The version number of this SyncProvider implementation.
*/
private String versionNumber = "1.0";
private JdbcRowSetResourceBundle resBundle;
private XmlReader xmlReader;
private XmlWriter xmlWriter;
/**
* This provider is available to all JDBC <code>RowSet</code> implementations as the
* default persistence provider.
*/
public RIXMLProvider() {
providerID = this.getClass().getName();
try {
resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
} catch(IOException ioe) {
throw new RuntimeException(ioe);
}
}
/**
* Returns <code>"javax.sql.rowset.providers.RIXMLProvider"</code>, which is
* the fully qualified class name of this provider implementation.
*
* @return a <code>String</code> object with the fully specified class name of
* this <code>RIOptimisticProvider</code> implementation
*/
public String getProviderID() {
return providerID;
}
// additional methods that sit on top of reader/writer methods back to
// original datasource. Allow XML state to be written out and in
/**
* Sets this <code>WebRowSet</code> object's reader to the given
* <code>XmlReader</code> object.
*
* @throws SQLException if a database access error occurs
*/
public void setXmlReader(XmlReader reader) throws SQLException {
xmlReader = reader;
}
/**
* Sets this <code>WebRowSet</code> object's writer to the given
* <code>XmlWriter</code> object.
*
* @throws SQLException if a database access error occurs
*/
public void setXmlWriter(XmlWriter writer) throws SQLException {
xmlWriter = writer;
}
/**
* Retrieves the reader that this <code>WebRowSet</code> object
* will call when its <code>readXml</code> method is called.
*
* @return the <code>XmlReader</code> object for this SyncProvider
* @throws SQLException if a database access error occurs
*/
public XmlReader getXmlReader() throws SQLException {
return xmlReader;
}
/**
* Retrieves the writer that this <code>WebRowSet</code> object
* will call when its <code>writeXml</code> method is called.
*
* @return the <code>XmlWriter</code> for this SyncProvider
* @throws SQLException if a database access error occurs
*/
public XmlWriter getXmlWriter() throws SQLException {
return xmlWriter;
}
/**
* Returns the <code>SyncProvider</code> grade of syncrhonization that
* <code>RowSet</code> object instances can expect when using this
* implementation. As this implementation provides no synchronization
* facilities to the XML data source, the lowest grade is returned.
*
* @return the <code>SyncProvider</code> synchronization grade of this
* provider; must be one of the following constants:
* <PRE>
* SyncProvider.GRADE_NONE,
* SyncProvider.GRADE_MODIFIED_AT_COMMIT,
* SyncProvider.GRADE_CHECK_ALL_AT_COMMIT,
* SyncProvider.GRADE_LOCK_WHEN_MODIFIED,
* SyncProvider.GRADE_LOCK_WHEN_LOADED
* </PRE>
*
*/
public int getProviderGrade() {
return SyncProvider.GRADE_NONE;
}
/**
* Returns the default UPDATABLE_VIEW behavior of this reader
*
*/
public int supportsUpdatableView() {
return SyncProvider.NONUPDATABLE_VIEW_SYNC;
}
/**
* Returns the default DATASOURCE_LOCK behavior of this reader
*/
public int getDataSourceLock() throws SyncProviderException {
return SyncProvider.DATASOURCE_NO_LOCK;
}
/**
* Throws an unsupported operation exception as this method does
* function with non-locking XML data sources.
*/
public void setDataSourceLock(int lock) throws SyncProviderException {
throw new UnsupportedOperationException(resBundle.handleGetObject("rixml.unsupp").toString());
}
/**
* Returns a null object as RowSetWriters are not returned by this SyncProvider
*/
public RowSetWriter getRowSetWriter() {
return null;
}
/**
* Returns a null object as RowSetWriter objects are not returned by this
* SyncProvider
*/
public RowSetReader getRowSetReader() {
return null;
}
/**
* Returns the release version ID of the Reference Implementation Optimistic
* Synchronization Provider.
*
* @return the <code>String</code> detailing the version number of this SyncProvider
*/
public String getVersion() {
return this.versionNumber;
}
/**
* Returns the vendor name of the Reference Implementation Optimistic
* Synchronization Provider
*
* @return the <code>String</code> detailing the vendor name of this
* SyncProvider
*/
public String getVendor() {
return this.vendorName;
}
}

View file

@ -0,0 +1,159 @@
/*
* Copyright (c) 2003, 2023, 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.
*/
/**
*
* Repository for the {@code RowSet} reference implementations of the
* {@code SyncProvider} abstract class. These implementations provide a
* disconnected {@code RowSet}
* object with the ability to synchronize the data in the underlying data
* source with its data. These implementations are provided as
* the default {@code SyncProvider} implementations and are accessible via the
* {@code SyncProvider} SPI managed by the {@code SyncFactory}.
*
* <h2>1.0 {@code SyncProvider} Reference Implementations</h2>
* The main job of a {@code SyncProvider} implementation is to manage
* the reader and writer mechanisms.
* The {@code SyncProvider} SPI, as specified in the {@code javax.sql.rowset.spi}
* package, provides a pluggable mechanism by which {@code javax.sql.RowSetReader}
* and {@code javax.sql.RowSetWriter} implementations can be supplied to a disconnected
* {@code RowSet} object.
* <P>
* A reader, a {@code javax.sql.RowSetReader}
* object, does the work necessary to populate a {@code RowSet} object with data.
* A writer, a {@code javax.sql.RowSetWriter} object, does the work necessary for
* synchronizing a {@code RowSet} object's data with the data in the originating
* source of data. Put another way, a writer writes a {@code RowSet}
* object's data back to the data source.
* <P>
* Generally speaking, the course of events is this. The reader makes a connection to
* the data source and reads the data from a {@code ResultSet} object into its
* {@code RowSet} object. Then it closes the connection. While
* the {@code RowSet} object is disconnected, an application makes some modifications
* to the data and calls the method {@code acceptChanges}. At this point, the
* writer is called to write the changes back to the database table or view
* from which the original data came. This is called <i>synchronization</i>.
* <P>
* If the data in the originating data source has not changed, there is no problem
* with just writing the {@code RowSet} object's new data to the data source.
* If it has changed, however, there is a conflict that needs to be resolved. One
* way to solve the problem is not to let the data in the data source be changed in
* the first place, which can be done by setting locks on a row, a table, or the
* whole data source. Setting locks is a way to avoid conflicts, but it can be
* very expensive. Another approach, which is at the other end of the spectrum,
* is simply to assume that no conflicts will occur and thus do nothing to avoid
* conflicts.
* Different {@code SyncProvider} implementations may handle synchronization in
* any of these ways, varying from doing no checking for
* conflicts, to doing various levels of checking, to guaranteeing that there are no
* conflicts.
* <P>
* The {@code SyncProvider} class offers methods to help a {@code RowSet}
* object discover and manage how a provider handles synchronization.
* The method {@code getProviderGrade} returns the
* grade of synchronization a provider offers. An application can
* direct the provider to use a particular level of locking by calling
* the method {@code setDataSourceLock} and specifying the level of locking desired.
* If a {@code RowSet} object's data came from an SQL {@code VIEW}, an
* application may call the method {@code supportsUpdatableView} to
* find out whether the {@code VIEW} can be updated.
* <P>
* Synchronization is done completely behind the scenes, so it is third party vendors of
* synchronization provider implementations who have to take care of this complex task.
* Application programmers can decide which provider to use and the level of locking to
* be done, but they are free from having to worry about the implementation details.
* <P>
* The JDBC {@code RowSet} Implementations reference implementation provides two
* implementations of the {@code SyncProvider} class:
*
* <UL>
* <LI>
* <b>{@code RIOptimisticProvider}</b> - provides the {@code javax.sql.RowSetReader}
* and {@code javax.sql.RowSetWriter} interface implementations and provides
* an optimistic concurrency model for synchronization. This model assumes that there
* will be few conflicts and therefore uses a relatively low grade of synchronization.
* If no other provider is available, this is the default provider that the
* {@code SyncFactory} will supply to a {@code RowSet} object.
* <br>
* <LI>
* <b>{@code RIXMLProvider}</b> - provides the {@code XmlReader} (an extension
* of the {@code javax.sql.RowSetReader} interface) and the {@code XmlWriter}
* (an extension of the {@code javax.sql.RowSetWriter} interface) to enable
* {@code WebRowSet} objects to write their state to a
* well formed XML document according to the {@code WebRowSet} XML schema
* definition.<br>
* </UL>
*
* <h2>2.0 Basics in RowSet Population &amp; Synchronization</h2>
* A rowset's first task is to populate itself with rows of column values.
* Generally, these rows will come from a relational database, so a rowset
* has properties that supply what is necessary for making a connection to
* a database and executing a query. A rowset that does not need to establish
* a connection and execute a command, such as one that gets its data from
* a tabular file instead of a relational database, does not need to have these
* properties set. The vast majority of RowSets, however, do need to set these
* properties. The general rule is that a RowSet is required to set only the
* properties that it uses.<br>
* <br>
* The {@code command} property contains the query that determines what
* data a {@code RowSet} will contain. Rowsets have methods for setting a query's
* parameter(s), which means that a query can be executed multiple times with
* different parameters to produce different result sets. Or the query can be
* changed to something completely new to get a new result set.
* <p>Once a rowset contains the rows from a {@code ResultSet} object or some
* other data source, its column values can be updated, and its rows can be
* inserted or deleted. Any method that causes a change in the rowset's values
* or cursor position also notifies any object that has been registered as
* a listener with the rowset. So, for example, a table that displays the rowset's
* data in an applet can be notified of changes and make updates as they
* occur.<br>
* <br>
* The changes made to a rowset can be propagated back to the original data
* source to keep the rowset and its data source synchronized. Although this
* involves many operations behind the scenes, it is completely transparent
* to the application programmer and remains the concern of the RowSet provider
* developer. All an application has to do is invoke the method {@code acceptChanges},
* and the data source backing the rowset will be updated to match the current
* values in the rowset. </p>
*
* <p>A disconnected rowset, such as a {@code CachedRowSet} or {@code WebRowSet}
* object, establishes a connection to populate itself with data from a database
* and then closes the connection. The {@code RowSet} object will remain
* disconnected until it wants to propagate changes back to its database table,
* which is optional. To write its changes back to the database (synchronize with
* the database), the rowset establishes a connection, write the changes, and then
* once again disconnects itself.<br>
* </p>
*
* <h2> 3.0 Other Possible Implementations</h2>
* There are many other possible implementations of the {@code SyncProvider} abstract
* class. One possibility is to employ a more robust synchronization model, which
* would give a {@code RowSet} object increased trust in the provider's
* ability to get any updates back to the original data source. Another possibility
* is a more formal synchronization mechanism such as SyncML
* (<a href="http://www.syncml.org/">http://www.syncml.org/</a>) <br>
* @since 1.5
*/
package com.sun.rowset.providers;