воскресенье, 15 апреля 2012 г.

Oracle + NetBeans


Христос воскресе!!
В этоn замечательный день я хочу уменьшить ваши мучения при подключении Oracle DB к NetBeans. Предположу, что вы уже установили себе Oracle (можно XE, как у меня). И теперь вам не терпится поработать с базами данных и написать программу, которая её использует. Может быть вы даже поставили себе JDeveloper, но лично меня он пока не впечатлил. Точнее нет. Он очень крут. Но система с ним тормозит- возьми да вешайся и это на i5 проце. NetBeans тоже можно использовать на СУБД. Пусть он не настолько кликабелен  как Jdeveloper , но ничего, подучите PL/SQL. Ну что, вытаскиваем руки из задницы, ставим чуть ниже шеи и кладём на клавиатуру.




Из первоначальных требований:
   Установленная система- >=1шт.
   Установленный OracleDB(XE) = 1шт.
   Установленный NetBeans >= 1шт.
   Установленный SunJDK = 1шт.
   Мозг - 1 шт. Желательно 2 полушария.
   Руки - можно 1 но на правильном месте хоть как-то связанную с мозгом.



Ну что, в атаку. Я очень ленив, и описывать то, что описано мне не хочется. Как в NetBeans подключить BD описано здесь .Если кратко, то мы вызываем окно "службы"(Ctrl+F5). В нём кликаем правой клавишей по "Базы данных" и выбираем "новое соединение". Выбираем драйвер Oracle Thin и Нет Бианс говорит, что драйвера нет и любезно перенаправляет нас на страницу его скачивания . Загрузив драйвер ojdbc6.jar ,мы выбираем его кнопочкой «добавить» в диалоговом окне NetBeans.




Потом пред нами предстоит ввод Адреса вашей BD (скорее всего localhost) Но нет, если установленная oracle на другой машине. Так же имя пользователя и пароль. Так как аккаунт hr/hr с недавних пор по умолчанию заблокирован, мы введём system/{пароль, который вы указали при установке oracle} . Нажимаем "проверить соединение" и тут нас «Фейсом об тейбл»!ORA-12705: Cannot access NLS data files or invalid environment specified
Вот
ведь незадачка-то: Вариантов решения этой проблемы несколько. Гугл и форумчани вовсю советуют:
1)
Взять старый драйвер для oracle9( некошерно )
2)
Установить глобальную переменную NLS_LANG в en_US.utf8, в винде тоже самое, только в реестре.


1 вариант честно не пробовал. Второй - не помог, видимо он для 10 оракла или то-то типа того. Поэтому есть ещё 3-й и четвёртый варианты.  Для того, чтоб решить проблему, давайте поймём, от чего она. Если вы устанавливали и Oracle NetBeans на 1 машину, то ошибки у вас возможно и нет. Потому, что она насколько я понял из-за несоответствия кодировок сервера и клиента, Сервер БД  устанавливает внутреннюю кодировку скриптиком.
{oracle home}/product/{version}/xe/bin/nls_lang.sh . Этот скрипт анализирует кодировку вашей системы и выдаёт подходящую для БД на экран. Могу предположить, что этот скрипт выполняется при запуске OracleXE и результат его работы присваивается куда-то. Но это предположения. На стороне клиента, на сколько я понимаю, по крайней мере драйвер  ojdbc6 выполняет то же самое ,только с кодировкой системы клиента. И если кодировки разные и несовместимые, то вываливается ошибка NLS . Как же быть? Можно на стороне клиента в системе поставить кодировку, аналогичную серверу, давайте так и сделаем.
export LANG=us_US.utf8. Запускаем NetBeans в этой же консольке и мы успешно подключаемся к базе. Но способ не самый удобный, поэтому существует ещё 1.
Мы отредактируем конфигурационный файлик NetBeans.{NET BEANS HOME}/etc/netbeans.conf . И в переменную netbeans_default_options добавим ещё 1 параметр.
-J-Duser.region=US . После этого снова успешно подключаемся к базе.  В этом посте мне хотелось ещё рассказать 2 слова о подключении Oracle к java, но статья затянулась, и об этом я продолжу после.


1 комментарий: