为什么我的Java / Oracle 11g线程应用程序失败了?

时间:2011-07-08 21:10:14

标签: java eclipse oracle11g

我有一个在Eclipse中创建的Windows桌面Java应用程序,它使用Java 1.5 JRE作为编译器和Oracle OCI驱动程序同时与多个数据库通信。我的系统正在运行Oracle 11g客户端。我仍然是Java的新手,因此,我最近了解到,在%JAVA_HOME%\ lib \ ext路径上安装必要的Oracle OCI驱动程序并非最佳做法。我的程序正常运行,直到我从%JAVA_HOME%\ lib \ ext文件夹中删除ojdbc5.jar驱动程序。

现在,尽管在Eclipse中的项目中将ojdbc5.jar添加到我的Build Path中,但我的应用程序错误,并显示以下消息:

  
    

线程“pool-1-thread-1”中的异常java.lang.UnsatisfiedLinkError:t2cCreateState         at oracle.jdbc.driver.T2CConnection.t2cCreateState(Native Method)         在oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:338)         at oracle.jdbc.driver.PhysicalConnection。(PhysicalConnection.java:490)         在oracle.jdbc.driver.T2CConnection。(T2CConnection.java:133)         at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:53)         at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:465)         at java.sql.DriverManager.getConnection(Unknown Source)         at java.sql.DriverManager.getConnection(Unknown Source)         at pkgPasswordChamp.Password_Champ.getConnection(Password_Champ.java:555)         at pkgPasswordChamp.Password_Champ.executeStatement(Password_Champ.java:635)         at pkgPasswordChamp.Password_Champ.loginToMarket(Password_Champ.java:678)         at pkgPasswordChamp.Password_Champ.access $ 0(Password_Champ.java:663)         at pkgPasswordChamp.Password_Champ $ currentMarket.run(Password_Champ.java:753)         at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)         在java.lang.Thread.run(未知来源)

  

要解决此问题,到目前为止,我已尝试修改Windows XP Path System变量和Windows XP Classpath System变量。每个变量似乎都包含对必要文件夹和文件的引用。

  

路径:C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0;%ORACLE_HOME%\ bin;%JAVA_HOME%\ bin;%ORACLE_HOME%\ bin \ ocijdbc11.dll;

     

Classpath:.; C:\ Program .; C:\ Program Files \ QuickTime \ QTSystem \ QTJava.zip;。;。; C:\ PROGRA~1 \ JMF21~1.1E \ lib \ sound.jar; C :\ PROGRA〜1个\ JMF21〜1.1E \ lib中\ jmf.jar; C:\ PROGRA〜1 \ JMF21〜1.1E \ lib中;%SYSTEMROOT%\的java \类;%ORACLE_HOME%\ JDBC \ lib中\ ojdbc5.jar ;

其他论坛建议java.lang.UnsatisfiedLinkError:t2cCreateState错误意味着缺少与Oracle驱动程序关联的DLL。我试图将oci.dll和ocijdbc11.dll文件添加到Eclipse中的Build Path,但我仍然收到同样的错误。

任何人都可以解释为什么抛出“java.lang.UnsatisfiedLinkError:t2cCreateState”以及我可以采取哪些步骤来解决错误?

对我来说,为什么应用程序在%JAVA_HOME%\ lib \ ext文件夹中仅使用 ojdbc5.jar可以正常工作,但是当ojdbc5.jar被删除并放在构建应用程序的路径。对这位新手的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

“如果Java虚拟机无法找到声明为native的方法的适当本机语言定义,则抛出该异常。”

我不确定为什么移动Jar会使它工作/不工作,但它是否与Java无关,无法再找到Oracle客户端安装及其DLL?

尝试将所需的DLL复制到运行Java的文件夹中,或者将Oracle Client安装目录添加到类路径中?

(ps - 如果你使用多个数据库,你可能会遇到没有事务管理器处理两阶段提交的问题 - 注意你不要在数据库之间获得不一致的数据!)