11

我的 j2ee Web 应用程序中出现此错误。

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

 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
 oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
 oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:376)
 oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
 oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
 oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
 oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839)
 java.sql.DriverManager.getConnection(Unknown Source)
 java.sql.DriverManager.getConnection(Unknown Source)
 org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
 org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
 org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
 org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)


 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)

这个项目适用于我同事的电脑......我的意思是这个项目适用于他们,但是当我询问他们的项目文件夹并将其导入我的 Eclipse 时,当我运行它时,我遇到了这个错误。jar 文件已经打包在项目文件夹中。

我还使用 hibernate 创建了一个简单的 j2ee 项目,但我遇到了同样的错误。我尝试 ping 数据库服务器并使用 PL/SQL 开发人员浏览它,我没有任何问题

4

11 回答 11

8

尝试以下操作:

  1. 检查 NLS_LANG 设置是否正确。在 Windows 上,它位于注册表中的\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. 检查是否正确安装了 Oracle 客户端软件。
  3. 检查该计算机上是否有多个 Oracle 主目录。在这种情况下,找到活动的并检查它是否有效。
  4. 如果安装了 SQL*Plus,请使用 SQL*Plus 进行测试。Sql Developer 可以工作,因为它有自己的客户端安装。

编辑:
关于驱动程序,请查看此站点:Oracle Instant Client。在那里,您将找到有关 JDBC 访问 Oracle 所需的最低驱动程序安装的文档。我对此了解不多,因为我使用.Net。

编辑 2:
看到这个问题:NLS_LANG setting for JDBC thin driver。与您遇到的错误相同,问题是未定义 NLS LANG 的默认语言环境。引用:

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

  Locale.setDefault(Locale.<your locale here>);
于 2009-10-27T11:12:59.970 回答
7

我发现您可以将这两个参数传递给您的 Java 应用程序来解决问题:

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

您也可以在环境变量级别配置值(取决于您的操作系统)。

于 2010-04-08T12:56:34.033 回答
7

我有同样的问题。解决方案是将国家和语言添加到sqldeveloper.conf

请打开文件:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

并添加以下内容:

AddVMOption -Duser.language=en
AddVMOption -Duser.region=us

以上就是诀窍。

参考: http: //forum.oradba.net/showthread.php?t=423 &langid=1

于 2011-12-12T12:13:36.407 回答
5

对于 Windows 环境,您需要将系统区域设置更改System FormatEnglish/US.

如何更改系统区域设置?

于 2012-11-28T06:44:20.797 回答
1

我找到了解决方案,我只是在我的操作系统(Windows 7)中更改区域和语言,确保它与 oracle 区域和语言匹配。

于 2010-08-03T07:43:39.730 回答
1

Oracle JDBC 驱动程序在打开新连接后隐式执行以下语句:

ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory'

在我们的案例中,我们遇到了 Oracle XE 11g 和嵌入 JDBC 驱动程序的默认语言/区域映射的问题:“ru”区域设置映射到仅受 Oracle EE 支持的“CIS”区域,但 Oracle XE 只有“RUSSIA”区域。这是我们解决此问题的方法:

-Doracle.jdbc.territoryMap="ru=RUSSIA;RU=RUSSIA"

NLS_LANGUAGE 有一个选项(我们对默认值没有问题):

-Doracle.jdbc.languageMap="ru=RUSSIAN;RU=RUSSIAN"

修复:常量ru=RUSSIAN取自 java jdbc 驱动程序的 oracle.sql.converter.CharacterSetMetaData 类。

于 2016-02-27T18:47:16.067 回答
1

如果您使用 intelljIDE 进行编译,我建议您在配置模型中找到的 VMoptions 中添加以下选项

AddVMOption -Duser.region=us. 
于 2019-10-25T15:47:25.857 回答
0

首先执行查询:

select userenv('LANGUAGE') from dual;`

这将赋予oracle 区域和语言。更改操作系统中的区域和语言,两者都应该匹配。

于 2018-03-27T07:06:23.737 回答
0

检查 JAVA_HOME 系统变量并验证它是否与您在项目和程序中使用的版本相同

于 2019-02-27T20:19:26.343 回答
0

更改我机器的区域设置和语言有助于摆脱这种情况。我将地区更改为美国和英语(美国)作为语言。

于 2019-11-25T07:06:54.650 回答
0

如果您正在运行 spring 应用程序,只需添加 Locale.setDefault(Locale.ENGLISH); 在主课上。

public static void main(String[] args) throws Exception
{
    Locale.setDefault(Locale.ENGLISH);
    SpringApplication.run(ApplicationName.class, args);



}
于 2021-04-30T10:24:50.100 回答