XML-Binärformat in Java-Anwendungen
Die IBM® Data Server Driver for JDBC and SQLJ kann XML-Daten an den Datenserver senden oder XML-Daten vom Datenserver als binäre XML-Daten abrufen (Daten im Extensible Dynamic Binary XML DB2® Client/Server Binary XML Format ). Der Datenserver muss Unterstützung für binäre XML-Daten bereitstellen.
Die IBM Data Server Driver for JDBC and SQLJ stellt der Anwendung binäre XML-Daten nur über XML-Objektschnittstellen zur Verfügung. Dem Benutzer werden die Daten nicht im XML-Binärformat angezeigt.
Das Format der XML-Daten ist für die Anwendung transparent. Die Speicherung und Abfrage von binären XML-Daten erfordert Version 4.9 oder höher des IBM Data Server Driver for JDBC and SQLJ. Wenn Sie in SQLJ-Anwendungen mit XML-Binärdaten arbeiten, ist ebenfalls das Paket 'sqlj4.zip' der Version 4.9 oder höher erforderlich.
Mit der Eigenschaft 'xmlFormat' steuern Sie, ob als Datenformat zum Abrufen von XML-Daten XML-Textformat oder XML-Binärformat verwendet wird. Der Wert XML_FORMAT_BINARY (1) für 'xmlFormat' aktiviert das XML-Binärformat. Der Standardwert ist XML-Textformat.
Bei der Aktualisierung von Daten in XML-Tabellenspalten hat 'xmlFormat' keine Auswirkungen. Wenn es sich bei den Eingabedaten um XML-Binärdaten handelt und der Datenserver keine XML-Binärdaten unterstützt, werden die Eingabedaten in XML-Textdaten konvertiert. Andernfalls findet keine Konvertierung statt.
Wenn binäre XML-Daten verwendet werden, dürfen die an die IBM Data Server Driver for JDBC and SQLJ übergebenen XML-Daten dürfen sich nicht auf externe Entitäten, interne Entitäten oder interne DTDs beziehen. Externe DTDs werden nur unterstützt, wenn sie zuvor in der Datenquelle registriert wurden.
Auf der Connection -Schnittstelle ist keine setXXX -Methode für die xmlFormat -Eigenschaft definiert. Um den Wert xmlFormat festzulegen, wenn Sie die Schnittstelle Connection verwenden, müssen Sie daher xmlFormat als Eigenschaft angeben, wenn Sie die Methode DriverManager.getConnection ausführen. Beispiel:
properties.put("xmlFormat", "1");
DriverManager.getConnection(url, properties);
- Entfernen Sie die BOM aus dem XML-Instanzdokument in der Eingabedatei.
- Verwenden Sie ein InputStreamReader -Objekt mit einem Charset -Objekt namens UTF-16 für die Eingabedatei.
- Verwenden Sie für die Eingabedatei ein InputStream -Objekt anstelle eines InputStreamReader -Objekts.
Das XML-Binärformat ist am effizientesten für Fälle, in denen die Ein- oder Ausgabedaten nichttextuell dargestellt werden, z. B. als SAX, StAX oder DOM. Mit den folgenden Methoden beispielsweise werden XML-Daten abgerufen, die nichttextuell dargestellt werden:
- getSource(SAXSource.class)
- getSource(StAXSource.class)
- getSource(DOMSource.class)
Mit diesen Methoden werden XML-Spalten mit Daten aktualisiert, die nichttextuell dargestellt werden:
- setResult(SAXResult.class)
- setResult(StAXResult.class)
- setResult(DOMResult.class)
Die SAX-Darstellung ist die effizienteste Methode zum Abrufen von Daten, die das XML-Binärformat aufweisen, da die Daten nicht extra aus dem Binär- in das Textformat konvertiert werden müssen.
…
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT XMLCOL FROM XMLTABLE");
ContentHandler handler = new MyContentHandler();
while (rs.next()) {
SQLXML sqlxml = rs.getSQLXML(1);
SAXSource source = sqlxml.getSource(SAXSource.class);
XMLReader reader = source.getXMLReader();
reader.setContentHandler(handler);
reader.parse(source.getInputSource());
}
…Mit dem folgenden SQLJ-Beispiel werden dieselben Aktionen ausgeführt.
#sql iterator SqlXmlIter(java.sql.SQLXML);
{
…
SqlXmlIter SQLXMLiter = null;
java.sql.SQLXML outSqlXml = null;
ContentHandler handler = new MyContentHandler();
#sql [ctx] SQLXmlIter = {SELECT XMLCOL FROM XMLTABLE};
#sql {FETCH :SqlXmlIter INTO :outSqlXml};
while (!SQLXMLIter.endFetch()) {
SAXSource source = outSqlXml.getSource(SAXSource.class);
XMLReader reader = source.getXMLReader();
reader.setContentHandler(handler);
reader.parse(source.getInputSource());
#sql {FETCH :SqlXmlIter INTO :outSqlXml};
}
…
}