Es scheint, dass Sie einige Verwirrung über Null-Arrays, leere Arrays und Arrays haben, die nur einen einzigen NULL
enthalten Wert.
Ein NULL
array ist das Fehlen eines Arrays, genauso wie ein NULL
Zahl ist das Fehlen einer Zahl. Ein leeres Array ist ein Array, das existiert, aber 0 Elemente enthält. Beide unterscheiden sich von NUMBER_ARRAY(null)
, bei dem es sich um ein Array handelt, das einen einzelnen NULL
enthält Wert.
Der COUNT
Methode auf einem Array, die die Anzahl der Elemente im Array zurückgibt, veranschaulicht die Unterschiede zwischen diesen dreien.
Zuerst ein NULL
Array:
SQL> declare
2 l_null_array number_array := null;
3 begin
4 dbms_output.put_line('Count: ' || l_null_array.COUNT);
5 end;
6 /
declare
*
ERROR at line 1:
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 4
Hier erhalten wir einen Fehler. Wir können nicht herausfinden, wie viele Elemente es in l_null_array
gibt weil wir kein Array haben, um die Anzahl der Elemente zu finden.
Zweitens ein leeres Array:
SQL> declare
2 l_empty_array number_array := number_array();
3 begin
4 dbms_output.put_line('Count: ' || l_empty_array.COUNT);
5 end;
6 /
Count: 0
PL/SQL procedure successfully completed.
Hier können wir die Anzahl der Elemente in einem leeren Array finden, und diese Zahl ist null.
Schließlich ein Array, das nur NULL
enthält :
SQL> declare
2 l_array_containing_null number_array := number_array(null);
3 begin
4 dbms_output.put_line('Count: ' || l_array_containing_null.COUNT);
5 end;
6 /
Count: 1
PL/SQL procedure successfully completed.
Dieses Array enthält ein Element, und dieses eine Element ist NULL
.
Beachten Sie, dass Sie beliebig viele Argumente an NUMBER_ARRAY
übergeben können Konstruktorfunktion, und diese Werte sind die anfänglichen Inhalte des Arrays. Beispiel:NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
erstellt ein Zahlenarray mit 6 Elementen darin.
Wie können wir also jede Art von Array mit JDBC festlegen?
-
Um einen
NULL
zu setzen Array, verwenden Sieps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
wie Sie es oben getan haben.
-
Verwenden Sie für ein leeres Array:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Für ein Array, das einen einzelnen
NULL
enthält nur Wert, verwenden Sieps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Ich verwende eine Integer
array in diesen Beispielen, aber andere numerische Typen sollten auch funktionieren.