26

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

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

当用户将应用程序语言环境切换到 Oracle JDBC 驱动程序(例如 mk_MK)不支持的语言环境时,这是一个问题。在这种情况下,下次我获取连接时会出现以下异常:

ORA-00604: 递归 SQL 级别 1 发生错误
ORA-12705: 无法访问 NLS 数据文件或指定的环境无效

我可以在获取连接之前即时更改语言环境并来回切换回用户选择的语言环境,但这似乎不优雅且效率低下。

4

5 回答 5

19

另请参阅: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
于 2010-11-19T11:56:24.707 回答
15

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

Locale.setDefault(Locale.<your locale here>);
于 2009-08-20T12:59:52.483 回答
11

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

来自Oracle® Database JDBC Developer's Guide and Reference

提供全球化支持

基本的 Java 归档 (JAR) 文件 ojdbc5.jar 和 ojdbc6.jar 包含所有必要的类,以提供完整的全球化支持:

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

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

于 2010-04-06T14:06:36.863 回答
6

使用以下方法调用 java 对我有用:

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

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

于 2012-08-28T12:57:38.053 回答
1

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

于 2010-11-23T15:22:40.370 回答