Det verkar som om du har en viss förvirring angående null-arrayer, tomma arrayer och arrayer som bara innehåller en enda NULL värde.
En NULL array är frånvaron av en array, på samma sätt som en NULL nummer är frånvaron av ett nummer. En tom array är en array som finns, men som har 0 element i sig. Båda skiljer sig från NUMBER_ARRAY(null) , som är en array som innehåller en enda NULL värde.
COUNT metod på en array, som returnerar antalet element i arrayen, ger en illustration av skillnaderna mellan dessa tre.
Först en 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
Här får vi ett fel. Vi kan inte ta reda på hur många element det finns i l_null_array eftersom vi inte har en array att hitta antalet element i.
För det andra, en tom 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.
Här kan vi hitta antalet element i en tom array, och det numret är noll.
Slutligen en array som endast innehåller 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.
Denna array har ett element inom sig, och det ena elementet är NULL .
Observera att du kan skicka så många argument som du vill till NUMBER_ARRAY konstruktorfunktion, och dessa värden kommer att vara det initiala innehållet i arrayen. Till exempel, NUMBER_ARRAY(1, 4, 18, 11, 22, 6) skapar en nummermatris med 6 element i den.
Så, hur kan vi ställa in varje typ av array med JDBC?
-
För att ställa in en
NULLarray, användps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");som du har gjort ovan.
-
För en tom array, använd:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0])); -
För en array som innehåller en enda
NULLendast värde, användps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Jag använder ett Integer array i dessa exempel, men andra numeriska typer bör också fungera.