【问题标题】:java.lang.UnsatisfiedLinkError: no ocijdbc11 in java. library.pathjava.lang.UnsatisfiedLinkError:java 中没有 ocijdbc11。库.路径
【发布时间】:2013-10-13 22:37:09
【问题描述】:

我正在尝试将 jdbc oci 连接 连接到使用 os 身份验证

oracle 11g

我制作了一个示例控制台应用程序来测试某些客户端机器上的连接

我在具有 jdk 6 的机器上开发了应用程序,并在项目中使用了 jar ojdbc6.jar

我用来连接数据库的代码如下:

OracleDataSource ods = new OracleDataSource();
String tnsName="Prod";
ods.setURL("jdbc:oracle:oci:/@"+tnsName);
Connection conn = ods.getConnection();

我正在尝试从安装了 oracle11g 的客户端计算机上运行此应用程序,并且 oracle home 的路径设置为:C:\orant\jdk\bin

还有路径:C:\orant\bin包含oci.dll且不包含ocijdbc11.dll

客户端安装了jre7,没有jdk。

当试图在经过操作系统认证到 oracle 数据库的客户端机器上运行上述代码时,我收到以下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc11 in java.
library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:3178)
        at java.security.AccessController.doPrivileged(Native Method)
        at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java
:3174)
        at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:233)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:
508)
        at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:133)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtensio
n.java:53)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510)
        at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSou
rce.java:275)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java
:206)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java
:156)
        at auth.Main.main(Main.java:42)

请告知我该如何解决此异常。

【问题讨论】:

  • 您应该将 ocijdbc.dll 作为 Oracle 安装的一部分;我不确定它在 Windows 中的位置,但在 Linux 中它位于 ORACLE_HOME/lib 下。我认为,您也需要PATH 中的任何目录。我没有环境可以检查,所以我不太确定。或者this 可能会起作用...
  • 可能是 32 位 64 位问题。该dll和您的Java的位数是多少? BTW:ocijdbc11 是符号名,不一定与文件名匹配。
  • @Alex Poole,@Mark Rotteveel 我在客户端机器上找不到 ocijdbc11.dll 吗?请建议尝试的解决方案。
  • @Alex Poole,@Mark Rotteveel 我认为还有其他方法可以在不需要 dll 的情况下建立连接,对吧?

标签: java oracle jdbc oracle-call-interface


【解决方案1】:

在这篇文章中,我能够使用 jdbc 成功连接到 oracle 数据库:

How to connect to oracle database with os authentication?

【讨论】:

    【解决方案2】:

    如果您使用 OCI url("jdbc:oracle:oci:/@"+tnsName),那么您需要类路径上的 oracle 客户端库。所以你需要在机器上安装 oracle 客户端。

    但是如果你使用瘦驱动并指定如下的url,你就不需要oracle客户端了。

    "jdbc:oracle:thin:@"+dbServer+":"+port+":"+SID; 
    

    【讨论】:

      【解决方案3】:

      尝试在 /usr/share/tomcat/conf/tomcat.conf 中为 ld_path 设置正确的值:

      LD_LIBRARY_PATH="/usr/lib/oracle/11.2/client64/lib:/usr/lib64"
      

      【讨论】:

        【解决方案4】:

        如果你正在使用带有 Jboss 6.1.0 干扰的 Eclipse。它会显示错误 线程“主”java.lang.UnsatisfiedLinkError 中的异常:java 中没有 ocijdbc11。 库.路径 解决方案 : 从 oracle\product\11.2.0\client_1\BIN 复制 ocijdbc11.dll 并粘贴到

        D:\jboss-6.1.0.Final\bin\native

        【讨论】:

          【解决方案5】:

          我认为您遇到此问题是因为您使用的是带有 type-2 驱动程序的 JRE 1.6 或更低版本的 Java。请用 JRE 1.7 或 JRE 1.8 替换您的 JRE 1.6 构建路径。它会解决问题。

          请按以下步骤操作:

          1. 右键单击您的项目文件夹
          2. 点击属性
          3. 点击java构建路径。
          4. 从库中选择 jre 1.6 或更低版本的“jre 系统库”并将其删除,因为这将成为原因。
          5. 现在点击添加库
          6. 点击jre系统库
          7. 点击下一步
          8. 通过单击环境按钮选择执行环境为 JavaSE-1.8(jre1.8.0_144),然后按确定。
          9. 点击已安装的jre按钮
          10. 从中选择 jre1.8(如果 jre1.8 不存在,请单击添加按钮并添加它)。
          11. 点击完成。
          12. 点击确定。
          13. 哇!你会发现你的代码正在运行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-03
            • 2021-12-14
            • 2019-04-13
            • 2013-04-04
            相关资源
            最近更新 更多