Weitere Grundlagen für Sybase XML

Die Klasse ResultSetXml ist eine generische Unterklasse der Klasse JXml. Diese Klasse ist dafür konzipiert, aus jedem gültigen SQL-Statement in jeder SQL-Tabelle ein XML-Ergebnisdokument zu erzeugen. Außerdem bietet sie Methoden zur Validierung des, für den Zugriff auf das und zur Aktualisierung des XML Result Set-Dokuments. Wir werden hier XML Result Sets mit der ResultSetXml Klasse erzeugen.

Der Quellcode und Javadoc für die ResultSetXml Klasse befinden sich im folgenden Sybase Server Verzeichnis (abhängig von der Plattform):


$SYBASE/ASE-12_5/sample/JavaSql (UNIX)
%SYBASE%ASE-12_5sampleJavaSql (Windows NT)

Erzeugen eines XML Result Sets
Für dieses Beispiel werden wir die Tabellen benutzen, die wir im letzten Artikel erstellt und ausgefüllt haben (Listing A).

Die SQL in (Listing B) erzeugt die mit den Beispieldaten zu verwendenden Tabellen. Sie enthält die Standard-SQL zum Ausfüllen der Tabelle Orders.

Das Beispiel in (Listing C) erzeugt eine SQL-Anweisung vom Client, das die Server-Tabellen, die wir in Listing A erzeugt haben, anfordert. Es verwendet dann die Constructor-Methode ResultSetXml, um ein ResultSetXml-Objekt zu erzeugen. Wir erzeugen dann eine Datei OrderResultSet.xml, die wir als nächstes betrachten werden. Im oben genannten Beispiel würden wir jdbc:default:connection als Login Information verwenden (oder das Feld einfach leer lassen), wenn wir das Code Fragment auf dem Server ausführen würden.

Das Dokument ResultSetXml, das wir erzeugt haben, enthält sowohl den Abschnitt ResultSetMetaData als auch den Abschnitt ResultSetData. Dieses Dokument ResultSetXml entspricht dem folgenden Format:


<?xml version="1.0"?>
<!DOCTYPE ResultSet SYSTEM 'ResultSet.dtd'>
<ResultSet>
<ResultSetMetaData>
...
</ResultSetMetaData>
<ResultSetData>
...
</ResultSetData>
</ResultSet>

Das vollständige Dokument, das in Listing D zu sehen ist, enthält das Dokument ResultSetXml (im Dateiordner OrderResultSet.xml), das von unserem Beispiel erzeugt wurde.

ResultMetaData, der erste Abschnitt eines ResultSetXml-Dokuments (Listing D), enthält die Informationen, die nicht direkt einer bestimmten Spalte zugeordnet sind, gefolgt von ColumnMetaData. Die Attribute von ColumnMetaData beziehen sich direkt auf die JDBC-Methoden der Klasse ResultMetaData . Der nächste Abschnitt, ResultSetData, enthält die tatsächlichen Zeilenelemente, von denen jedes die Namen und die Daten der Spaltenattribute enthält.

Die ResultSetXml-DTD
Die DTD (Dokumenttyp-Definition) ResultSet.dtd für das Dokument ResultSetXml in Listing E beschreibt unser ResultSetXml-Dokument.

Hier eine kurze Erläuterung der DTD in Listing E:

  • besagt, dass das ResultSetXml-Dokument einen äußeren ResultSet-Knoten mit zwei eingebetteten Knoten hat, ResultSetMetaData und ResultSetData.
  • besagt, dass der Abschnitt ResultSetMetaData über einen oder mehrere ColumnMetaData-Knoten verfügt (+ bedeutet einen oder mehr und ? bedeutet null oder mehr).
  • besagt, dass der Abschnitt ResultMetaData ein Attribut GetColumnCount hat, das dem/den Knoten ColumnMetaData vorausgeht.

Speicheroptionen
Für die Speicherung von ResultSetXML.xml verfügen wir über dieselben Optionen, die wir im vorangegangenen Artikel bei der OrderXML Custom-Klasse betrachtet haben. Element-, Dokument- und Hybridspeichertechnik sind möglich. In unserem nächsten Artikel werden wir näher auf diese Möglichkeiten eingehen.

Wie geht es weiter?
In unserem letzten Artikel haben wir die XML Speicher- und Auslesemöglichkeiten in Sybase ASE (Adaptive Server Enterprise) behandelt, die sich durch die Fähigkeit von ASE ergeben, Java Custom-Klassen zu verwenden. Wir haben die Klasse ResultSetXml untersucht und auch die DTD und das XML-Dokument, das sie beschreibt, und wir haben ein Code-Fragment untersucht, der aus einer einfachen SQL SELECT-Anweisung sowohl auf dem Client als auch auf dem Server ein ResultSetXml-Dokument erzeugt. Inzwischen ist wahrscheinlich klar geworden, dass das ResultSetXml-Dokument – anders als die OrderXml Klasse in unserem letzten Artikel – zur Beschreibung eines beliebigen Ergebnissatzes , aber nicht zur Erzeugung eingebetteter Knoten benutzt werden kann. Dies ist nur durch Erzeugung einer speziellen Java-Klasse möglich, die nur mit einem scharf umgrenzten Satz von Daten verwendet werden kann. Eine Custom-Klasse kann zum Anlegen von mehr als einer Dokumentenform verwendet werden. Dies ist ein weiterer Grund dafür, dass eine Java Virtual Machine auf dem Server so ein mächtiges Werkzeug ist.

Im nächsten Artikel untersuchen wir die Umsetzung von ResultSetXml sowohl auf dem Client als auch dem Server sowie den Zugriff auf die Spalten eines gespeicherten ResultSetXml-Dokuments mit der Document Storage Methode als Spalte einer SQL-Tabelle. Wir werden in nahezu der gleichen Art, wie man eine WHERE-Klausel in einer normalen SQL-Anweisung verwenden würde, auch einen quantitativen Vergleich mit der Dokumentenspeicher-Methode vornehmen.

ZDNet.de Redaktion

Recent Posts

Microsoft nennt weitere Details zu kostenpflichtigen Patches für Windows 10

Erstmals liegen Preise für Verbraucher vor. Sie zahlen weniger als Geschäftskunden. Dafür beschränkt Microsoft den…

6 Stunden ago

Microsoft verschiebt erneut Copilot Recall

Die Entwickler arbeiten noch an weiteren „Verfeinerungen“. Windows Insider erhalten nun wohl eine erste Vorschau…

1 Tag ago

GenKI im Job: Mitarbeitende schaffen Tatsachen

Laut Bitkom-Umfrage werden in jedem dritten Unternehmen in Deutschland private KI-Zugänge genutzt. Tendenz steigend.

1 Tag ago

97 Prozent der Großunternehmen melden Cyber-Vorfälle

2023 erlitten neun von zehn Unternehmen in der DACH-Region Umsatzverluste und Kurseinbrüche in Folge von…

1 Tag ago

„Pacific Rim“-Report: riesiges, gegnerisches Angriffs-Ökosystem

Der Report „Pacific Rim“ von Sophos beschreibt Katz-und-Maus-Spiel aus Angriffs- und Verteidigungsoperationen mit staatlich unterstützten…

1 Tag ago

DeepL setzt erstmals auf NVIDIA DGX SuperPOD mit DGX GB200-Systemen

NVIDIA DGX SuperPOD soll voraussichtlich Mitte 2025 in Betrieb genommen und für Forschungsberechnungen genutzt werden.

1 Tag ago