Oracle JDBC 连接:java.library.path 中没有 ocijdbc9

Posted

技术标签:

【中文标题】Oracle JDBC 连接:java.library.path 中没有 ocijdbc9【英文标题】:Oracle JDBC connection: no ocijdbc9 in java.library.path 【发布时间】:2014-08-07 15:43:21 【问题描述】:

我在尝试连接到 oracle 数据库时遇到以下错误, 当我在网上搜索时,建议是在类路径中添加所需的 jar,我已经这样做了。我什至尝试创建一个运行配置,在类路径中添加了 jar,仍然得到同样的错误。

请帮忙,

错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at oracle.jdbc.oci8.OCIDBAccess.logon(OCIDBAccess.java:262)
    at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:346)
    at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at com.example.DAO1.main(DAO1.java:13)

代码:

package com.example;

import java.sql.*;
import java.io.*;

class DAO1 
    public static void main(String args[]) throws SQLException, IOException 
        // Load the driver
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

        // Connect to the database
        // You can put a database name after the @ sign in the connection URL.
        Connection conn = DriverManager.getConnection(
                "jdbc:oracle:oci8:@mydevdb:1521:mysandbox", "uname", "pwd");

        System.out.println(conn);

        // Close the connection
        conn.close();
    

我添加了 ojdbc14.jar

【问题讨论】:

刚刚注意到我将连接字符串更改为'jdbc:oracle:thin'后,错误消失了!虽然不清楚 【参考方案1】:

您需要 100% Java 的 JDBC 瘦驱动程序,而不是 OCI 驱动程序。这需要一个 DLL,JVM 告诉您它不在 LD_LIBRARY_PATH 中。

把网址改成

Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@mydevdb:1521:mysandbox", "uname", "pwd");

我也不喜欢您拥有的驱动程序 JAR。我建议至少获取 ojdbc6.jar。 ojdbc14.jar 是 JDK 1.4 老式 - 已经过时了。

【讨论】:

我改成 jdbc:oracle:thin 并检查了,错误消失了,虽然不知道原因+1,感谢原因。关于 jar 版本,我从这个线程中选择了它 - ***.com/questions/919921/… 。将更新到 ojdbc6.jar ,我正在使用 jdk1.6 。我可以尽快接受答案 嗨@duffymo - 当你有机会时,你能帮我对我刚刚发布的这个问题提出一些建议吗 - ***.com/questions/25190219/…【参考方案2】:

永远不要手动调用DriverManager.registerDriver() 方法。 JDBC 规范要求驱动程序在加载类时自行注册,并且类通过Class.forName() 加载。在JDBC 4 中,驱动程序只需位于类路径上即可自动加载。

【讨论】:

在 docs.oracle.com 的示例中就是这样:docs.oracle.com/cd/A84870_01/doc/java.816/a81354/samapp2.htm 但有时您可能最终会注册您的驱动程序类两次 我同意这不是必需的,但它对于早期的 JDBC 习惯用法是正确的。前面的例子都会这样做。做两次不会破坏交易 - 充其量是纳米优化。 ya @duffymo 你是对的,现在在 JDBC 4 中,如果驱动程序位于类路径中,则它们能够自动加载,这是一个很大的进步。 很棒?充其量是轻微的。

以上是关于Oracle JDBC 连接:java.library.path 中没有 ocijdbc9的主要内容,如果未能解决你的问题,请参考以下文章

JDBC连接ORACLE

java使用jdbc连接oracle数据库怎么关闭连接

使用jdbc连接oracle

jdbc 连接 oracle rac

jdbc连接oracle语法

JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库