Alle nachfolgenden SQL-Anweisungen, deren Ausführung in der angegebenen Verbindung durch die Anwendung angefordert wird, werden im Speicher in die Warteschlange gestellt. Von pureQuery werden Dummy-Ergebnisse an die Anwendung zurückgegeben, um anzugeben, dass jede Anweisung erfolgreich ausgeführt wurde, obwohl die Anweisungen noch gar nicht ausgeführt wurden. Sie rufen eine Methode auf, die gegenüber pureQuery angibt, dass eine Aktualisierung im Stapelbetrieb beendet wird. An diesem Punkt werden von pureQuery alle in die Warteschlange gestellten SQL-Anweisungen ausgeführt.
data.startBatch(HeterogeneousBatchKind.heterogeneousModify_);
Nach Aufrufen dieser Methode werden von pureQuery alle SQL-Anweisungen, deren Ausführung in der Anwendung für die gleiche Implementierung der Schnittstelle Data angefordert wird, in die Warteschlange gestellt.
INSERT-, UPDATE- und DELETE-Anweisungen werden von pureQuery so lange in die Warteschlange gestellt, bis von der Anwendung die Methode endBatch() aufgerufen wird.
Während die Anweisungen von pureQuery in die Warteschlange gestellt werden, werden Dummy-Ergebnisse an die Anwendung zurückgegeben, um anzugeben, dass die Anweisungen erfolgreich ausgeführt wurden.Die Anwendung kann anfordern, dass nur INSERT-, UPDATE- und DELETE-Anweisungen ausgeführt werden. Von pureQuery werden alle anderen Typen von SQL-Anweisungen zurückgewiesen, und diese Anweisungen werden nicht für Ihre Verbindung ausgeführt. Wenn die Anwendung einen anderen Typ von SQL-Anweisung übergibt, wird von pureQuery eine Ausnahmebedingung ausgelöst und alle Anweisungen gelöscht, die für den Stapel in die Warteschlange gestellt wurden. Außerdem wird von pureQuery die Anweisung, durch die die Ausnahmebedingung verursacht wurde, nicht ausgeführt.
Wenn von der Anwendung die Methode startBatch() erneut aufgerufen wird, bevor die Methode endBatch() aufgerufen wird, wird der Stapelprozess von pureQuery gestoppt, die in die Warteschlange gestellten Anweisungen gelöscht und RuntimeException ausgelöst.
int[][] batchResult = data.endBatch();
Die in die Warteschlange gestellten Anweisungen werden von pureQuery in einem Netzdurchlauf ausgeführt. Von der Methode wird ein zweidimensionales Integer-Array der Aktualisierungszähler zurückgegeben, die von den Methoden update() und updateMany() zurückgegeben worden wären. Die Größe der ersten Dimension entspricht der Anzahl Anforderungen, die von der Anwendung zum Ausführen der SQL-Anweisungen übergeben wurden Die Größe der zweiten Dimension ist entweder:HeterogeneousBatchKind getBatchKind();
Wenn ein Stapel in Bearbeitung ist, wird von der Methode heterogeneousModify_ zurückgegeben. Wenn kein Stapel in Bearbeitung ist, wird von der Methode hetergeneousNone_ zurückgegeben.Von der Anwendung kann die Methode updateMany() zwischen dem Aufruf der Methoden startBatch() und endBatch() aufgerufen werden. Von der Methode updateMany() kann eine einzelne SQL-Anweisung INSERT, UPDATE oder DELETE mehrmals für ein einzelnes Datenbankobjekt aufgerufen werden. Weitere Informationen zu dieser Methode finden Sie in Aktualisierungen einzelner Datenbankobjekte im Stapelbetrieb mit der Methode updateMany() der Schnittstelle 'Data'.
Damit sie Bestandteil der im Stapelbetrieb ausgeführten Aktualisierung sind, müssen alle integrierten und mit Annotationen versehenen Methoden, die die SQL-Anweisungen ausführen, dasselbe Datenobjekt gemeinsam nutzen. SQL statements must share the same Data object. Dies erfolgt geringfügig unterschiedlich, abhängig von der Mischung der durch die Benutzeranwendung verwendeten pureQuery-Methoden.
Data data = DataFactory.getData(jdbcConnection);
data.startBatch(...);
// weitere Methoden von Data, durch die die Data-Instanz "data" verwendet wird
int[][] batchResult = data.endBatch();
Nachdem die Methode endBatch() durch die Anwendung aufgerufen wurde, kann die Data-Instanz für verschiedene Zwecke verwendet werden, falls Sie dies möchten.Data data = DataFactory.getData (jdbcConnection);
// verwenden Sie jetzt "data" zum Instanziieren der verwendeten Schnittstellen
EmployeeInterface emp = DataFactory.getData (EmployeeInterface.class, data);
DepartmentInterface dept = DataFactory.getData (DepartmentInterface.class, data);
data.startBatch(...);
// weitere Methoden von Data und mit Annotationen versehene Methoden (EmployeeInterface und DepartmentInterface)
int[][] batchResult = data.endBatch();
EmployeeInterface emp = DataFactory.getData (EmployeeInterface.class, jdbcConnection);
DepartmentInterface dept = DataFactory.getData (DepartmentInterface.class, (Data) emp);
Data data = (Data) emp;
data.startBatch(...);
// weitere mit Annotationen versehene Methoden (EmployeeInterface und DepartmentInterface)
int[][] batchResult = data.endBatch();
Für die Datenbank stellen alle SQL-Anweisungen zwischen startBatch() und endBatch() eine Transaktion dar. Der Aufruf von commit() oder rollback() nach startBatch() und vor dem Aufruf von endBatch() bewirkt, dass der Stapel nicht ausgeführt wird und die in die Warteschlange gestellten Anforderungen verloren gehen. Schließlich wird durch pureQuery eine RuntimeException ausgelöst.