ClassNotFoundException при запуске в командной строке, но отлично работает на IntelliJ IDEA - PullRequest
0 голосов
/ 10 февраля 2019

Итак, я просто пробовал простой код для начинающих JDBC, который извлекает строки таблицы.Это работало хорошо, когда я запускал его на IntelliJ IDEA.но он не запускается, когда я пытаюсь запустить его с помощью командной строки.

Я прошел через много похожих вопросов, но ни один из них не ответил на мою проблему.Я пробовал следующие вещи:

  1. искал любые опечатки при компиляции и запуске файла Java (это было правильно)
  2. включал драйвер ojdbc8 в classpath, но это не работало какхорошо.
  3. Я подтвердил, что мой JDK установлен в переменной среды.

, и мои файлы сохранены как "oracle.java", а мой класс называется "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)

1 Ответ

0 голосов
/ 10 февраля 2019

Предполагая, что вы скомпилировали файл, используя javac, вам нужно будет указать место, куда вы его скомпилировали, в classpath.Если у вас самая простая из возможных настроек, и вы вызвали javac без аргумента -d, указывающего место назначения компиляции, он будет расположен в том же каталоге, что и ваш исходный файл.

Если нет, при условии, что ваш файл JARи ваш исходный файл находится в том же каталоге, вам нужно сделать:

javac -classpath ojdbc8.jar oracle.java`

После этого вам нужно указать расположение скомпилированных классов в classpath во время выполнения.Для моего примера, в котором ваш рабочий каталог совпадает с расположением исходного файла и файла JAR.

java -classpath ojdbc8.jar;. oracle
...