Sembra che tu abbia una certa confusione su array nulli, array vuoti e array che contengono solo un singolo NULL
valore.
Un NULL
array è l'assenza di un array, allo stesso modo di un NULL
numero è l'assenza di un numero. Un array vuoto è un array che esiste, ma contiene 0 elementi. Entrambi sono diversi da NUMBER_ARRAY(null)
, che è un array che contiene un singolo NULL
valore.
Il COUNT
metodo su un array, che restituisce il numero di elementi nell'array, fornisce un'illustrazione delle differenze tra questi tre.
Innanzitutto, un NULL
matrice:
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
Qui, otteniamo un errore. Non possiamo scoprire quanti elementi ci sono in l_null_array
perché non abbiamo un array di cui trovare il numero di elementi.
In secondo luogo, un array vuoto:
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.
Qui possiamo trovare il numero di elementi in un array vuoto e quel numero è zero.
Infine, un array contenente solo NULL
:
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.
Questo array ha un elemento al suo interno e quell'elemento è NULL
.
Nota che puoi passare tutti gli argomenti che vuoi al NUMBER_ARRAY
funzione di costruzione e questi valori saranno il contenuto iniziale dell'array. Ad esempio, NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
crea una matrice di numeri con 6 elementi al suo interno.
Quindi, come possiamo impostare ogni tipo di array usando JDBC?
-
Per impostare un
NULL
matrice, usaps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
come hai fatto sopra.
-
Per un array vuoto, usa:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Per un array contenente un singolo
NULL
solo valore, utilizzareps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Sto usando un Integer
array in questi esempi, ma dovrebbero funzionare anche altri tipi numerici.