Как вставить String Array в столбец VARRAY? - PullRequest
3 голосов
/ 28 октября 2019

Я пытаюсь сделать вставки с использованием jdbc в таблицу с двумя столбцами VARRAY;один - VARRAY из int, другой - VARRAY из varchar2. Первый столбец вставляется отлично. Тем не менее, второй вставляет все значения как ноль.

Это таблица:

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

Это код Java для вставки с использованием 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();

После выполнения этого кода столбец «VALS» имеет два значения, но оба имеют нулевое значение:

SELECT * FROM DTBN_DETAILS;

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

1 Ответ

1 голос
/ 29 октября 2019

Я столкнулся с той же проблемой, что и вы. Решением было добавление orai18n.jar к пути к классам.

Согласно this .

Если клиенты и сервер используют разныенаборы символов, затем драйвер обеспечивает поддержку для выполнения преобразований между набором символов базы данных и набором символов клиента.

Базовый файл JAR ojdbc содержит все необходимые классы для обеспечения полной поддержки глобализации для:

  • Наборы символов Oracle для CHAR, VARCHAR. Данные LONGVARCHAR или CLOB, которые не извлекаются и не вставляются в качестве элемента данных типа объекта или коллекции Oracle 8.

  • Элементы данных CHAR или VARCHAR для объекта и коллекции для наборов символовUS7ASCII, WE8DEC, WE8ISO8859P1 и UTF8.

Чтобы использовать любые другие наборы символов в элементах данных объектов или коллекций CHAR или VARCHAR, необходимо включить orai18n.jar в CLASSPATH вашего приложения. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...