JDBC瘦驱动程序的NLS_LANG设置?

das*_*asp 23 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

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

Mic*_*las 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
Run Code Online (Sandbox Code Playgroud)


Ada*_*kes 13

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

Locale.setDefault(Locale.<your locale here>);
Run Code Online (Sandbox Code Playgroud)


小智 9

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

来自Oracle®DatabaseJDBC Developer's Guide and Reference

提供全球化支持

基本的Java Archive(JAR)文件ojdbc5.jar和ojdbc6.jar包含所有必需的类,以便为以下方面提供完整的全球化支持:

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

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


sva*_*nte 6

使用以下工作为我调用java:

-Duser.country=us -Duser.language=en
Run Code Online (Sandbox Code Playgroud)

如果国家的"en"也导致ORA-12705.