powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Cannot map Unicode to Oracle
9 сообщений из 9, страница 1 из 1
Cannot map Unicode to Oracle
    #32787011
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код:

oracle.sql.ArrayDescriptor arrayDesc = oracle.sql.ArrayDescriptor.createDescriptor("STRING_VARRAY", db_con);

oracle.sql.ARRAY arrayc = new oracle.sql.ARRAY(arrayDesc, db_con, subc);
oracle.sql.ARRAY arrays = new oracle.sql.ARRAY(arrayDesc, db_con, subs);
oracle.sql.ARRAY arrayn = new oracle.sql.ARRAY(arrayDesc, db_con, subn);
oracle.sql.ARRAY arraynt = new oracle.sql.ARRAY(arrayDesc, db_con, subnt);
oracle.sql.ARRAY arrayt = new oracle.sql.ARRAY(arrayDesc, db_con, subt);
oracle.sql.ARRAY arrayl = new oracle.sql.ARRAY(arrayDesc, db_con, subl);
CallableStatement cst = db_con.prepareCall("{ call APP_CONF.DOITEMSJOB(?,?,?,?,?,?,?,?) }");
cst.setArray(1, arrayc);
cst.setArray(2, arrays);
cst.setArray(3, arrayn);
cst.setArray(4, arraynt);
cst.setArray(5, arrayt);
cst.setArray(6, arrayl);
cst.setString(7, (overwrite? "1":"0"));
cst.registerOutParameter(8, java.sql.Types.ARRAY, "STRING_VARRAY");
cst.execute();
oracle.sql.ARRAY arrayResult = (oracle.sql.ARRAY)cst.getArray(8);
String[] res = (String[])arrayResult.getArray();
cst.close();

Он выкидывает всегда ошибку.
Если я выполняю процедуру cst.setString() с этими же
значениями из массива, то все работает, значит по идее кодировка
на базе стоит нормальная.
Что не так?

Oracle 9
JDBC 9.2.05

[04.11.17 01:48:12] Invocation exception: Cannot map Unicode to Oracle character.(java.sql.SQLException: Cannot map Unicode to Oracle character.)
java.sql.SQLException: Cannot map Unicode to Oracle character.
at oracle.sql.converter.CharacterConverter1Byte.toOracleCharacter(CharacterConverter1Byte.java:176)
at oracle.sql.converter.CharacterConverter1Byte.toOracleString(CharacterConverter1Byte.java:372)
at oracle.sql.CharacterSetWithConverter.convert(CharacterSetWithConverter.java:160)
at oracle.sql.CHAR.<init>(CHAR.java:159)
at oracle.sql.CHAR.<init>(CHAR.java:183)
at oracle.jdbc.oracore.OracleTypeCHAR.toDatum(OracleTypeCHAR.java:161)
at oracle.jdbc.oracore.OracleType.toDatumArray(OracleType.java:166)
at oracle.jdbc.oracore.OracleTypeCHAR.toDatumArray(OracleTypeCHAR.java:208)
at oracle.sql.ArrayDescriptor.toOracleArray(ArrayDescriptor.java:1517)
at oracle.sql.ARRAY.<init>(ARRAY.java:132)
at aktif$administration$konfiguration$import$html.run(aktif$administration$konfiguration$import$html.java:1473)
at Jasper.doGet(Jasper.java:90)
at Jasper.doPost(Jasper.java:109)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:521)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at org.apache.jserv.JServConnection.processRequest(JServConnection.java:314)
at org.apache.jserv.JServConnection.run(JServConnection.java:188)
at java.lang.Thread.run(Thread.java:534)
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787082
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nls_charset12.zip
в classpath и все пройдет.
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787289
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не помогло
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787769
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно... Мне помогало. На какую конкретно строчку ругается?
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787836
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка на строке:

oracle.sql.ARRAY arrayt = new oracle.sql.ARRAY(arrayDesc, db_con, subt);

subt - массив строк, которые содержат немецкие символы.

в случае, если только англ. то весь код работает нормально.
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787843
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В какой все-таки кодировке создана база?

Код: plaintext
1.
select * from sys.props$ where name = 'NLS_CHARACTERSET';

Еще может стоит попробовать: при создании объектного типа в Oracle указывать не VARCHAR2, а NVARCHAR2.
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32787972
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. NVARCHAR2 помогло.
Кодировка базы WE8ISO8859P1.
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32798765
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема опять всплыла:
при использовании NVARCHAR2 у немцев,
когда достаю значения из массива, они перекодированы.
У нас же все нормально. Я делал UTL_FILE.PUT_LINE(..) и
они нормально видны в файле. А у них ерунда.
Что это может быть.
...
Рейтинг: 0 / 0
Cannot map Unicode to Oracle
    #32801747
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем так:
Можно использовать VARCHAR2.
Чтобы избавится от Cannot map Unicode to Oracle,
массив строк который мы передаем в
oracle.sql.ARRAY arrayt = new oracle.sql.ARRAY(arrayDesc, db_con, subt);
надо перекодировать:
if(a != null)
a = new String(a.getBytes("Cp1250"), "Cp1250");
и все работает.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Cannot map Unicode to Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]