Eu estou tentando fazer inserções usando jdbc em uma tabela com duas colunas tem VARRAY; um é um VARRAY de int, o outro um VARRAY de VARCHAR2. A primeira coluna está a ser inserido perfeitamente. No entanto, o segundo um insere todos os valores como nulo.
Esta é a tabela:
CREATE OR REPLACE TYPE ARRAY_DTBN_STRING AS VARRAY(10) OF VARCHAR2(100);
CREATE OR REPLACE TYPE ARRAY_DTBN_INTEGER AS VARRAY(10) OF int;
CREATE TABLE DTBN_DETAILS(
ID VARCHAR2(100) PRIMARY KEY ,
VALS ARRAY_DTBN_STRING,
SIZES ARRAY_DTBN_INTEGER
);
Este é o código Java para a inserção usando JDBC:
DtbnDetails det = new DtbnDetails();
det.setId("ABC");
det.setValues(new String[] {"room","house"});
det.setSizes(new int[] {3,5});
String query = "INSERT INTO DTBN_DETAILS "+
"(ID, VALS, SIZES) VALUES (?, ?, ?)";
Connection conAux = Conexion.getConnection("main");
OracleConnection con = conAux.unwrap(OracleConnection.class);
PreparedStatement statement = con.prepareStatement(query);
int i=1;
String id = details.getId();
sentencia.setString(i++,id);
String[] values = details.getValues()==null ? new String[0] : details.getValues();
Array valuesArray = con.createOracleArray("ARRAY_DTBN_STRING", values);
statement.setArray(i++, valuesArray);
int[] sizes = details.getSizes()==null ? new int[0] : details.getSizes();
Array sizesArray = con.createOracleArray("ARRAY_DTBN_INTEGER", sizes);
statement.setArray(i++, sizesArray);
statement.execute();
con.commit();
Depois de executar este código, a coluna "VALS" tem dois valores, mas ambos são nulos:
SELECT * FROM DTBN_DETAILS;
ABC
ARRAY_DTBN_STRING(NULL, NULL)
ARRAY_DTBN_INTEGER(3, 5)
Fui confrontado com o mesmo problema que você. A solução foi adicionando orai18n.jar para o caminho da classe.
De acordo com este .
Se os clientes eo servidor usam diferentes conjuntos de caracteres, em seguida, o motorista fornece o suporte para executar as conversões entre o conjunto de caracteres de banco de dados e o conjunto de caracteres do cliente.
O arquivo JAR básica ojdbc contém todas as classes necessárias para fornecer suporte a globalização completa para:
conjuntos de caracteres Oracle para CHAR, VARCHAR. LONGVARCHAR, ou dados CLOB que não está a ser recuperados ou inseridos como um membro de dados de um objecto 8 Oracle ou tipo Collection.
CHAR ou VARCHAR membros de dados de objetos e coleta para os conjuntos de caracteres US7ASCII, WE8DEC, WE8ISO8859P1 e UTF8.
Para usar quaisquer outros conjuntos de caracteres em CHAR ou membros de dados VARCHAR de objetos ou coleções, você deve incluir orai18n.jar no CLASSPATH do seu aplicativo.