¿Cómo insertar una matriz de cadenas en una columna VARRAY?

javivalle:

Estoy tratando de hacer inserciones usando JDBC en una tabla con dos columnas VARRAY; uno es un VARRAY de int, el otro un VARRAY de varchar2. La primera columna se inserta perfectamente. Sin embargo, el segundo uno inserta todos los valores como nulo.

Esta es la tabla:

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
);

El código Java para la inserción utilizando 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();

Después de ejecutar este código, la columna "VALS" tiene dos valores, pero ambos son nulos:

SELECT * FROM DTBN_DETAILS;

ABC
ARRAY_DTBN_STRING(NULL, NULL)
ARRAY_DTBN_INTEGER(3, 5)
SternK:

Me encontré con el mismo problema que tú. La solución se agregó orai18n.jar a la ruta de clase.

De acuerdo con esto .

Si los clientes y el servidor utilizan diferentes juegos de caracteres, entonces el controlador proporciona el apoyo para realizar las conversiones entre el conjunto de caracteres base de datos y el conjunto de caracteres del cliente.

El archivo JAR ojdbc básica contiene todas las clases necesarias para proporcionar soporte completo para la globalización:

  • juegos de caracteres de Oracle para CHAR, VARCHAR. LONGVARCHAR, o datos CLOB que no está siendo recuperados o insertados como un miembro de datos de un objeto Oracle 8 o tipo Collection.

  • miembros de datos CHAR o VARCHAR de objetos y de recolección de los juegos de caracteres US7ASCII, WE8DEC, WE8ISO8859P1 y UTF8.

Para utilizar cualquier otro juego de caracteres en CHAR o VARCHAR miembros de datos de objetos o colecciones, debe incluir orai18n.jar en CLASSPATH de la aplicación.

Supongo que te gusta

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