2009-07-03 3 views
23

Я использую тонкий драйвер JDBC Oracle версии 10.2.0 (ojdbc14.jar). Я хотел бы настроить его NLS_LANG вручную. Есть ли способ?Настройка NLS_LANG для тонкого драйвера JDBC?

В настоящее время он извлекает этот параметр из переменной VM user.language (которая устанавливается автоматически путем установки текущего языкового стандарта или при запуске из системной среды).

Это проблема, когда пользователи переключают языковой стандарт приложения на тот, который не поддерживается драйвером JDBC Oracle (например, mk_MK). В этом случае, в следующий раз, когда я принесу соединение я получаю следующее исключение:

 
ORA-00604: error occurred at recursive SQL level 1 
ORA-12705: Cannot access NLS data files or invalid environment specified 

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

ответ

13

Настройки NLS_LANG получены из java.util.Locale. Таким образом, вам нужно будет сделать вызов, похожее на это перед подключением:

Locale.setDefault(Locale.<your locale here>); 
+1

Да, это именно то, что я сделал в конечном итоге. Он отлично работает, но это не очень красиво. Благодаря! – dasp

9

я боролся с той же проблемой и выяснили, что тонкие драйверы JDBC Oracle не требуют NLS_LANG или локаль системы должны быть указаны. Но когда вы подключаетесь к не-английским базам данных, вы должны иметь orai18n.jar в пути к классам.

из Справочное руководство

Обеспечение глобализации Поддержка ORACLE® JDBC Database разработчика

Основные Java Archive (JAR) файлов, ojdbc5.jar и ojdbc6.jar, содержат все необходимые классы для предоставления полной поддержки глобализации для:

  • наборы символов Oracle для CHAR, VARCHAR , LONGVARCHAR или CLOB данных , не будучи извлечены или , вставленные в качестве элемента данных в Oracle объекта или типа.
  • СИМ или VARCHAR элементы данных объекта и коллекции для наборов символов US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252 и UTF8.

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

+0

http://docs.oracle.com/cd/E18283_01/java.112/e16548/global.htm – Raven

17

Смотрите также: https://serverfault.com/questions/63216/ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/64536

Для меня лучший ответ был на FoxyBOA для вызова приложения Java с:

-Duser.country=en -Duser.language=en 
+0

Забавный. Голосовать за собственный ответ здесь: D – FoxyBOA

+1

+1, поскольку он намного менее инвазивен, чем принятый в настоящее время ответ. –

+0

Спасибо. Работал для SQLDeveloper, а также для веб-логики data-source – WelcomeTo

1

Вы должны использовать старый Oracle 9.2 драйвер JDBC, который полностью совместим и сертифицирован с Oracle 10g. Старый драйвер не использует команды ALTER SESSION SET NLS_LANGUAGE.

6

Вызов Java со следующими работами для меня:

-Duser.country=us -Duser.language=en 

если "ан" для страны также вызывает ORA-12705.

+0

Это потому, что нет страны «EN». Есть: США, GB и многие другие, у которых английский как официальный язык –

Смежные вопросы