我在我的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)
这个项目在我同事的PC上工作......我的意思是这个项目对他们有效,但当我要求他们的项目文件夹并将其导入我的日食时,当我运行它时,我遇到了这个错误。 jar文件已与项目文件夹一起打包。
我还使用hibernate创建了一个简单的j2ee项目,但我遇到了同样的错误。我试图ping数据库服务器并使用PL / SQL开发人员浏览它,我没有任何问题
试试以下:
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
下的注册表中。编辑: 关于司机,请查看此网站: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>);
我发现你可以将这两个参数传递给你的Java应用程序来解决这个问题:
-Duser.country=en -Duser.language=en
您也可以在环境变量级别配置值(取决于您的操作系统)。
对于Windows env,您需要将系统区域设置和System Format
更改为English/US
。
我有同样的问题。解决方案是将国家和语言添加到sqldeveloper.conf
请打开文件:
\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf
并添加以下内容:
AddVMOption -Duser.language=en
AddVMOption -Duser.region=us
以上就是诀窍。
我找到了解决方案,我只是更改了操作系统中的区域和语言(Windows 7),确保它与oracle区域和语言匹配。
首先执行查询:
select userenv('LANGUAGE') from dual;`
这将给oracle区域和语言。更改操作系统中的区域和语言,两者都应匹配。
打开新连接后,Oracle JDBC驱动程序隐式执行以下语句:
ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory'
在我们的例子中,我们遇到了Oracle XE 11g和嵌入JDBC驱动程序的默认语言/区域映射的问题:'ru'语言环境映射到'CIS'区域,只有Oracle EE支持,但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。
检查JAVA_HOME系统变量并验证它与您在项目和程序中使用的版本相同