Como inserir uma matriz de cadeia em uma coluna VARRAY?

javivalle:

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)
SternK:

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.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=330792&siteId=1
Recomendado
Clasificación