尝试 OpenJDK 11 + ojdbc10.jar 对于 Oracle 19c 时总是出现"ClassNotFound"错误



想要在GCP云shell中运行一个java程序来连接Oracle 19c和那里的java版本OpenJDK 11。总是得到ClassNotFoundException。

在Windows 10笔记本电脑中尝试了相同的OpenJDK(来自RedHat(,但得到了相同的错误。

然后我在Windows10中试用了JDK11(来自Oracle(,效果很好。

因为我最终必须在GCP中使用OpenJDK,我该如何解决这个问题?

非常简单的Java代码-

import java.sql.*;
class JdbcOracleConnectTest {
public static void main(String args[]) {
try {
// step1 load the driver class
Class.forName("oracle.jdbc.driver.OracleDriver");
// step2 create the connection object
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
// step3 create the statement object
Statement stmt = con.createStatement();
// step4 execute query
ResultSet rs = stmt.executeQuery("select * from emp");
while (rs.next())
System.out.println(rs.getInt(1) + "  " + rs.getString(2) + "  " + rs.getString(3));
// step5 close the connection object
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
C:appjdk11binjava -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

"ojdbc10.jar";来自Oracle。

C:appjdk11binjava -cp C:tempojdbc10.jar JdbcOracleConnectionTest
Error: Could not find or load main class JdbcOracleConnectionTest
Caused by: java.lang.ClassNotFoundException: JdbcOracleConnectionTest

更改代码的这一行:

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

到此:

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

请参阅Oracle文档,即JDBC开发人员指南

但是,您不再需要显式地加载[JDBC]驱动程序类,这样您就可以完全删除该行。请参阅此SO问题:是否不再需要Class.forName(JDBC_DRIVER(?

此外,连接URL的格式也发生了更改。请参阅Oracle Database XE快速入门。尝试以下操作:

jdbc:oracle:thin:@//localhost:1521/xe

最新更新