Db2 11.1

Progressives Streaming mit dem IBM Data Server Driver für JDBC und SQLJ

Wenn die Datenquelle progressives Streaming unterstützt, das auch als dynamisches Datenformat bezeichnet wird, kann der IBM® Data Server Driver for JDBC and SQLJ progressives Streaming verwenden, um Daten in LOB-oder XML-Spalten abzurufen.

Db2 for z/OS Version 9.1 und höher unterstützt progressives Streaming für LOBs und XML-Objekte. Db2 auf Linux-, UNIX-und Windows-Systemen Version 9.5 und höher, IBM Informix Version 11.50 und höher, und Db2 für IBM i V6R1 und höher unterstützen progressives Streaming für LOBs.

Bei progressivem Streaming bestimmt die Datenquelle dynamisch den effizientesten Modus, in dem LOBs oder XML-Daten auf der Basis der Größe von LOBs oder XML-Objekten zurückgegeben werden.

Progressives Streaming ist das Standardverhalten in den folgenden Umgebungen:
Minimale IBM Data Server Driver for JDBC and SQLJ -Version Minimale Datenserverversion Typen von Objekten
3,53 Db2 für IBM i V6R1 LOB, XML
3,50 Db2 auf Linux-, UNIX-und Windows-Systemen Version 9.5 LOB
3,50 IBM Informix Version 11.50 LOB
3.2 Db2 for z/OS Version 9 LOB, XML

Sie legen das progressive Streamingverhalten für neue Verbindungen unter Verwendung der IBM Data Server Driver for JDBC and SQLJ progressiveStreaming-Eigenschaft fest.

Für Datenquellen von Db2 for z/OS Version 9.1 und höher oder Db2 auf Linux-, UNIX-und Windows-Systemen Version 9.5 und höher können Sie das progressive Streaming-Verhalten für vorhandene Verbindungen mit der DB2Connection.setDBProgressiveStreaming(DB2BaseDataSource.YES)-Methode festlegen. Wenn Sie DB2Connection.setDBProgressiveStreaming(DB2BaseDataSource.YES) aufrufen, verwenden alle ResultSet -Objekte, die auf der Verbindung erstellt werden, progressives Streaming-Verhalten.

Wenn das progressive Streaming aktiviert ist, können Sie steuern, wann der JDBC-Treiber LOBs mit der Eigenschaft 'streamBufferSize' materialisiert. Wenn ein LOB-oder XML-Objekt kleiner-gleich dem Wert für 'streamBufferSize' ist, wird das Objekt materialisiert.

Ein LOB-Objekt wird auch dann materialisiert, wenn ein Anwendungsprogramm eine der folgenden Aktionen ausführt, unabhängig von den progressiveStreaming-oder streamBufferSize-Einstellungen:

Wichtig: Beim progressiven Streaming können Sie beim Abrufen eines LOB-oder XML-Werts aus einer Ergebnismenge in eine Anwendungsvariable den Inhalt dieser Anwendungsvariablen bearbeiten, bis Sie den Cursor bewegen oder den Cursor auf der ResultSet -Tabelle schließen. Danach ist der Inhalt der Anwendungsvariablen nicht mehr für Sie verfügbar. Wenn Sie alle Aktionen für das LOB in der Anwendungsvariablen ausführen, empfangen Sie eine SQLException . Angenommen, das progressive Streaming ist aktiviert, und Sie führen Anweisungen wie folgt aus:
… 
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM MY_TABLE");
rs.next();                // Erste Zeile der Ergebnismenge abrufen
Clob clobFromRow1  = rs.getClob(1); 
                          // CLOB aus der ersten Spalte der ersten
                          // Zeile in eine Anwendungsvariable platzieren
String substr1Clob = clobFromRow1.getSubString(1,50);
                          // Erste 50 Bytes des CLOB abrufen
rs.next();                // Cursor in nächste Zeile versetzen
                          // clobFromRow1 ist nicht mehr verfügbar.
// String substr2Clob = clobFromRow1.getSubString(51,100);
                          // Diese Anweisung würde zu einer SQL-Ausnahmebedingung führen.
Clob clobFromRow2  = rs.getClob(1); 
                          // CLOB aus der ersten Spalte der zweiten
                          // Zeile in eine Anwendungsvariable platzieren
rs.close();               // Ergebnismenge schließen
                          // clobFromRow2 ist nicht mehr vefügbar.
Nachdem Sie rs.next () ausgeführt haben, um den Cursor in der zweiten Zeile von ResultSet zu positionieren, ist der CLOB-Wert in clobFromRow1 nicht mehr für Sie verfügbar. Ebenso sind die Werte in clobFromRow1 und clobFromRow2 nach der Ausführung von rs.close () zum Schließen von ResultSet die Werte in clobFromRow1 und clobFromRow2 nicht mehr verfügbar.

Wenn Sie das progressive Streaming inaktivieren, hängt die Art und Weise, in der der IBM Data Server Driver for JDBC and SQLJ LOBs handhabt, von dem Wert der Eigenschaft fullyMaterializeLobData ab.

Die Verwendung des progressiven Streamings ist die bevorzugte Methode des LOB-oder XML-Datenabrufs.