【问题标题】:Not able to load OracleDriver class in simple java class无法在简单的 java 类中加载 OracleDriver 类
【发布时间】:2015-06-30 23:20:30
【问题描述】:

// DbConnector.java

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;

public class DbConnector {

    public static void main(String[] argv) {

        System.out.println("-------- Oracle JDBC Connection Testing ------");

        try {

            Class.forName("oracle.jdbc.driver.OracleDriver");

        } catch (ClassNotFoundException e) {

            System.out.println("Where is your Oracle JDBC Driver?");
            e.printStackTrace();
            return;

        }

        System.out.println("Oracle JDBC Driver Registered!");

        Connection connection = null;

        try {

            connection = DriverManager.getConnection(
                    "jdbc:oracle:thin:@172.17.119.108:1526:GESSDEV", "username",
                    "password");

        } catch (SQLException e) {

            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return;

        }

        if (connection != null) {
            System.out.println("You made it, take control your database now!");
        } else {
            System.out.println("Failed to make connection!");
        }
    }

}

我有一个名为 odbc14.jar 的 jdbc jar

javac -classpath odbc14.jar; DbConnector.java

编译成功

java -classpath odbc14.jar;数据库连接器

输出 :: -------- Oracle JDBC 连接测试 ------ 您的 Oracle JDBC 驱动程序在哪里?

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at DbConnector.main(DbConnector.java:13)

请帮我解决这个问题

我已经解决了上面的问题。现在我得到了新的例外

-------- Oracle JDBC 连接测试 ------ Oracle JDBC 驱动程序已注册! 连接失败!检查输出控制台

java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)

【问题讨论】:

  • 如果你的 jar 是 odbc14.jar 而不是 ojdbc14.jar 然后提取你的 odbc14.jar 并找到类 OracleDriver

标签: jdbc java


【解决方案1】:

ojdbc14.jar 一起使用的JDBC 驱动程序是oracle.jdbc.OracleDriver

见:Loading JDBC Driver Class - ojdbc14.jar

【讨论】:

  • 你不是说ojdbc14.jar吗?执行jar tvf jarfile 并检查它是否包含您期望的OracleDriver
  • 是的。是ojdbc14.jar。里面有一个类OracleDriver。
  • 感谢雷默斯。它现在正在工作。名称有误
  • C:\bea\jdk150_06\bin>java -classpath ojdbc14.jar; DbConnector -------- Oracle JDBC 连接测试 ------ Oracle JDBC 驱动注册!连接失败!检查输出控制台 java.sql.SQLException:Io 异常:网络适配器无法在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError. java:146) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) 这是我现在得到的异常
  • 终于解决了。指定的 connectionURL 有问题。
【解决方案2】:

将您的ojdbc14.jar 放入&lt;jdk_home&gt;\jre\lib\ext 并添加到CLASSPATH 变量中,然后您不必在编译或运行时指定类路径
如果您使用的是 java6,那么 oracle.jdbc.driver.OracleDriver 可以,但已弃用。所以最好使用oracle.jdbc.OracleDriver

【讨论】:

    【解决方案3】:

    只需将 odbc14.jar 这个 JAR 放在所需的 JRE 路径中,例如“C:\Program Files\Java\jdk1.7.0_65\jre\lib\ext”。

    这应该可以解决您的问题。

    【讨论】:

      【解决方案4】:

      你应该

       try {
      
                  Class.forName("oracle.jdbc.OracleDriver");
      
              }
      

      并将odbc14.jar 放在类路径中(如果尚未完成)

      【讨论】:

        【解决方案5】:

        只需要放入作为类路径的appsclassloader。我不确定,为什么我们需要放入 jre/lib/ext

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多