尝试 OpenJDK 11 + ojdbc10.jar for Oracle 19c 时总是出现 "ClassNotFound" 错误
Always got "ClassNotFound" error when trying OpenJDK 11 + ojdbc10.jar for Oracle 19c
想要运行 GCP 云中的java 程序shell 连接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:\app\jdk11\bin\java -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:\app\jdk11\bin\java -cp C:\temp\ojdbc10.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 Developer's Guide
但是,您不再需要显式加载 [JDBC] 驱动程序 class,因此您实际上可以完全删除该行。参考这个SO问题:
此外,连接的格式 URL 已更改。参考Oracle Database XE Quick Start。尝试以下操作:
jdbc:oracle:thin:@//localhost:1521/xe
想要运行 GCP 云中的java 程序shell 连接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:\app\jdk11\bin\java -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:\app\jdk11\bin\java -cp C:\temp\ojdbc10.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 Developer's Guide
但是,您不再需要显式加载 [JDBC] 驱动程序 class,因此您实际上可以完全删除该行。参考这个SO问题:
此外,连接的格式 URL 已更改。参考Oracle Database XE Quick Start。尝试以下操作:
jdbc:oracle:thin:@//localhost:1521/xe