Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP->Oracle русский 
:(
    Опции темы
3x3
Дата 22.9.2006, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Вобщем вот так у меня заработало в тестовом сервлете, и вставляет русские буквы (проверял в стороннем приложении в эту базу лазающем - буквы в таблице русские) и вынимает:

Код

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

java.util.Properties prop=new java.util.Properties();
prop.setProperty("NLS_LANG", "AMERICAN_AMERICA.UTF8");
prop.setProperty("user", "3х3");
prop.setProperty("password", "3+3+3");

Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost", prop);

// insert string "жзи", unicode entity used to ensure that it is really that string
PreparedStatement stmt = con.prepareStatement("insert into a values('\u0436\u0437\u0438')");
stmt.executeQuery();

stmt = con.prepareStatement("select a from a");
ResultSet rs = stmt.executeQuery();
int r=0;
while(rs.next()){
    String sss=null;
    sss=rs.getString(1);
    res+="<b>"+String.valueOf(r++)+" :</b>"+sss+"<br />";
}
con.rollback();

rs.close();
stmt.close();
con.close();


У вас должно и нормальное соединение зажить:
Код

Connection con = DriverManager.getConnection("jdbc:oracle:oci:@localhost", prop);


У меня jdbc:oracle:oci не живёт из-за небольшого насилия над базой по части юникода в varchar2 - ломается на длине русских строк. Похоже в штатном oci-клиенте до сих пор присутствует непонимание того, что буквы бывают длиннее одного байта. В общем было бы интересно узнать - заживут ли у вас оба драйвера.


Для теста использована таблица простейшей структуры:
Код

create table a (a varchar2(100));


По ходу отмечена проблемка в связи с тем, что rollback не откатывает транзакцию, но, думаю, это режим у JDBC-драйвера по умолчанию такой интересный, надо разбираться.



Это сообщение отредактировал(а) 3x3 - 22.9.2006, 03:56


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
mastanik
Дата 27.9.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



А в БД какая кодировка настроена?
PM MAIL   Вверх
3x3
Дата 27.9.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(mastanik @ 27.9.2006,  16:30)
А в БД какая кодировка настроена?

UTF-8.
У меня сейчас европейский eXpress Edition стоит, русского NLS там нет вообще. Т.е. русских чарсетов нет, русской сортировки нет (не проверял, кстати), русских сообщений нет, русских дат нет. И UTF-8 я ему насильно прописал, только что-б буквы русские попробовать.

Без перекодировки (т.е. пришло в UTF8 и сохраняется в UTF8) - хоть русские буквы засовываются. Хотя varchar2 при этом считает длину не по количеству символов, а по количеству байтов, т.е. макс.допустимое количество букв в строке будет ниже указанного при создании таблицы ровно в два раза. Что бы в длине строк не зависеть от кодировки, с 9й версии можно задавать поля в символах:
    create table t 
      (  x varchar2( 20 CHAR ),
       ...
    )




Вам собственно нужно провести 2х3 экспериментов: используя oci и thin драйвера с кодировками как у Базы, UTF-8 и какую-нить 8-битную какую ваша Java понимает, 1251 например. При этом, на всякий случай, выставляйте соответствующий NLS_LANG и в окружении процесса.


Это сообщение отредактировал(а) 3x3 - 28.9.2006, 16:58


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
mastanik
Дата 27.9.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



АААААААА!!!!!!!!
Кажись заработало! Спасибо огромное!!!!!!!
PM MAIL   Вверх
3x3
Дата 27.9.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(mastanik @ 27.9.2006,  17:42)
АААААААА!!!!!!!!
Кажись заработало! Спасибо огромное!!!!!!!

Ну так поделитесь чего и как заработало в вашей конкретной конфигурации. На будущее може ещё кому пригодится.


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
mastanik
Дата 28.9.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Пример 3х3 заработал.
PM MAIL   Вверх
3x3
Дата 28.9.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(mastanik @ 28.9.2006,  12:31)
Пример 3х3 заработал.

ОК. По всей видимости из-за вот этого:
prop.setProperty("NLS_LANG", "AMERICAN_AMERICA.UTF8");

Тогда как резюме:

ИМХО можно сделать вывод, что thin-драйвер не полагается на настройки на клиенте - ведь он может и из апплетки работать на клиенте, который или настроен неправильно или вообще не знает про существование Oracle. Т.е. он полагается на дефолтные настройки базы, но ничего про ISO-8859-5, видимо, не знает - т.е. JVM не имеет установленных правил трансляции этой кодировки в юникод. 

Задав параметры соединения явно, вы указали базе во что она должна транслировать буквы перед отправкой их на клиента. Если это так, то вместо UTF8 должна бы и CL8MSWIN1251 работать, если она установлена на сервере БД и поддержана клиентской джавой.


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.