JDBC瘦驱动程序的NLS_LANG设置?

时间:2009-07-03 16:06:54

标签: oracle jdbc nls ora-12705

我正在使用瘦Oracle JDBC驱动程序版本10.2.0(ojdbc14.jar)。我想手动配置其NLS_LANG设置。有办法吗?

目前,它从VM变量user.language(通过设置当前区域设置或从系统环境启动时自动设置)中获取此设置。

当用户将应用程序区域设置切换到Oracle JDBC驱动程序不支持的区域设置(例如mk_MK)时,这是一个问题。在这种情况下,下次我获取连接时,我得到以下异常:

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

我可以在获取连接之前动态更改语言环境,然后来回切换回用户选择的语音,但这看起来很不优雅且效率低下。

5 个答案:

答案 0 :(得分:17)

另请参阅:https://serverfault.com/questions/63216/ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/64536

对我而言,最好的回应是FoxyBOA用以下方式调用java app:

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

答案 1 :(得分:13)

NLS_LANG设置派生自java.util.Locale。因此,在连接之前,您需要进行类似的调用:

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

答案 2 :(得分:9)

我遇到了同样的问题,发现瘦的jdbc Oracle驱动程序不需要指定NLS_LANG或系统区域设置。但是当你连接到非英语数据库时,你将在类路径中拥有orai18n.jar。

来自Oracle®数据库JDBC开发人员指南和参考

  

提供全球化支持

     

基本的Java Archive(JAR)文件,   ojdbc5.jar和ojdbc6.jar,包含所有   提供必要的课程   完全全球化支持:

     
      
  • CHAR的Oracle字符集,   VARCHAR,LONGVARCHAR或CLOB数据   没有被检索或   作为Oracle的数据成员插入   对象或集合类型。
  •   
  • CHAR或   VARCHAR对象和数据的成员   字符集的集合   US7ASCII,WE8DEC,WE8ISO8859P1,   WE8MSWIN1252和UTF8。
  •   
     

使用任何其他字符集   CHAR或VARCHAR数据成员   对象或集合,你必须   在CLASSPATH中包含orai18n.jar   你的环境变量   应用

答案 3 :(得分:6)

为我调用带有以下作品的java:

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

如果国家/地区的“en”也会导致ORA-12705

答案 4 :(得分:1)

您应该使用与Oracle 10g完全兼容且经过认证的旧Oracle 9.2 JDBC驱动程序。旧驱动程序不使用ALTER SESSION SET NLS_LANGUAGE命令。