2009-07-03 244 views
23

我正在使用精简Oracle JDBC驱动程序版本10.2.0(ojdbc14.jar)。我想手动配置它的NLS_LANG设置。有没有办法?JDBC瘦驱动程序的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 

我可以动态更改的区域就在我取的连接,并切换到用户选择的一个来回,但这看起来不够优雅而且效率不高。

回答

13

NLS_LANG设置来自java.util.Locale。因此,你需要在连接之前做出类似这样的电话:

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

是的,这正是我最终做的。它工作正常,但不是很漂亮。谢谢! – dasp 2009-08-21 12:06:03

9

我打了同样的问题,并发现瘦JDBC驱动程序甲骨文不需要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 对象或集合的数据成员使用任何其他字符集,你必须 包括orai18n.jar在 应用程序的CLASSPATH 环境变量。

+0

http://docs.oracle.com/cd/E18283_01/java.112/e16548/global.htm – Raven 2015-02-05 19:39:58

1

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

6

调用java与以下工作对我来说:

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

如果 “恩” 为国内也引起ORA-12705