首页 > 解决方案 > 运行时找不到 JDBC 类

问题描述

我正在创建一个使用 JDBC 的应用程序,并且当前在运行代码时遇到问题而没有获得java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver. 我已经对尝试解决此问题进行了广泛的研究,但我尝试过的任何方法似乎都不起作用。

一方面,我想指出我的代码在从我的 IDE (intellij) 运行时运行良好。数据库连接正常,所有查询都根据需要执行。当我尝试在终端中使用javacand编译和运行时,问题就来了。java因为这是一个学校项目,我需要让我的教授能够在本地运行它。

其次,我正在使用 intellij 中包含的相同 jar 文件编译应用程序:

javac -classpath lib/\* DatabaseDriver.java

lib 文件夹包含我的 JDBC jar 文件。您可以在此处 (json.org)此处 (connector j)找到此文件夹中的两个 jar 文件。一切都正确编译,但似乎一旦代码中发生以下执行(完整代码见下文),这是一个运行时异常,表示找不到该类:

Class.forName("com.mysql.cj.jdbc.Driver"); // also tried com.mysql.jdbc.Driver

以下代码是我要编译的代码(不是完整的 DatabaseDriver,足以重现问题):

import org.json.JSONObject;
import java.sql.*;

public class DatabaseDriver {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";

    public static String runStatement(String sql) throws Exception {
        // Register JDBC driver
        Class.forName(JDBC_DRIVER);

        return "";
    }//end main

    public static void main(String[] args) throws Exception {
        DatabaseDriver.runStatement("SELECT * FROM employees LIMIT 10");
    }
}

这是我运行代码时得到的完整堆栈:

Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at DatabaseDriver.runStatement(DatabaseDriver.java:15)
        at DatabaseDriver.main(DatabaseDriver.java:40)

问题摘要:我无法运行此脚本以获取 jar 文件,即使它与我的 IDE 能够正确使用的 jar 文件相同。一定有一些我忘记或错过的事情要做,因为我发现的所有解决方案只需要处理忘记包含正确 jar 文件的人。

标签: javajdbc

解决方案


运行您的课程,如下所示:

在基于 Unix 的系统中

java -cp ".:lib/*" DatabaseDriver

在微软视窗中

java -cp ".;lib/*" DatabaseDriver

推荐阅读