在命令行上 运行 时出现 ClassNotFoundException,但在 IntelliJ IDEA 上运行良好
ClassNotFoundException when running on command line but runs fine on IntelliJ IDEA
所以我只是尝试一个简单的 JDBC 初学者代码来检索 table 行。当我在 IntelliJ IDEA 上 运行 它运行良好。但是当我尝试使用命令行 运行 时它不会 运行。
我遇到过很多类似的问题,但其中 none 回答了我的问题。
我尝试了以下操作:
- 在编译和 运行 宁 java 文件时寻找任何拼写错误(它是正确的)
- 在 classpath 中包含了 ojdbc8 驱动程序,但效果不佳。
- 我已经确认我在环境变量中设置了 JDK。
我的文件保存为 "oracle.java",如果有帮助,我的 class 名称是 "oracle"。
import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.Class;
class oracle
{
public static void main(String args[])
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp");
while(rs.next())
System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));
con.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
输出:
C:\Users\mypc\Desktop>java -cp ojdbc8.jar -Xdiag oracle
Error: Could not find or load main class oracle
Caused by: java.lang.ClassNotFoundException: oracle
java.lang.ClassNotFoundException: oracle
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/sun.launcher.LauncherHelper.loadMainClass(Unknown Source)
at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
假设您已经使用 javac
编译了该文件,那么您需要在类路径中包含编译它的位置。如果您有最简单的设置,并且在没有 -d
参数指示编译目标的情况下调用 javac
,它将位于与源文件相同的目录中。
如果没有,假设你的 JAR 文件和你的源文件在同一个目录中,你需要做:
javac -classpath ojdbc8.jar oracle.java`
之后,您需要在运行时将已编译的类 的位置包含在类路径中。对于我的示例,您的工作目录与源文件和 jar 文件的位置相同。
java -classpath ojdbc8.jar;. oracle
所以我只是尝试一个简单的 JDBC 初学者代码来检索 table 行。当我在 IntelliJ IDEA 上 运行 它运行良好。但是当我尝试使用命令行 运行 时它不会 运行。
我遇到过很多类似的问题,但其中 none 回答了我的问题。 我尝试了以下操作:
- 在编译和 运行 宁 java 文件时寻找任何拼写错误(它是正确的)
- 在 classpath 中包含了 ojdbc8 驱动程序,但效果不佳。
- 我已经确认我在环境变量中设置了 JDK。
我的文件保存为 "oracle.java",如果有帮助,我的 class 名称是 "oracle"。
import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.Class;
class oracle
{
public static void main(String args[])
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp");
while(rs.next())
System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));
con.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
输出:
C:\Users\mypc\Desktop>java -cp ojdbc8.jar -Xdiag oracle
Error: Could not find or load main class oracle
Caused by: java.lang.ClassNotFoundException: oracle
java.lang.ClassNotFoundException: oracle
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/sun.launcher.LauncherHelper.loadMainClass(Unknown Source)
at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
假设您已经使用 javac
编译了该文件,那么您需要在类路径中包含编译它的位置。如果您有最简单的设置,并且在没有 -d
参数指示编译目标的情况下调用 javac
,它将位于与源文件相同的目录中。
如果没有,假设你的 JAR 文件和你的源文件在同一个目录中,你需要做:
javac -classpath ojdbc8.jar oracle.java`
之后,您需要在运行时将已编译的类 的位置包含在类路径中。对于我的示例,您的工作目录与源文件和 jar 文件的位置相同。
java -classpath ojdbc8.jar;. oracle