[JDBC类在运行时找不到[重复]

问题描述 投票:0回答:1

我正在创建一个使用JDBC的应用程序,当前在不获取java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的情况下运行代码时遇到问题。我已经对尝试解决此问题进行了广泛的研究,但我尝试过的所有工作似乎都没有效果。

例如,我想指出,当从我的IDE(intellij)运行我的代码时,它可以正常工作。数据库连接有效,并且所有查询在必要时执行。当我尝试在终端中使用javacjava进行编译和运行时,就会出现问题。因为这是一个学校项目,所以我需要使我的教授能够在本地运行它。

第二,我使用intellij中也包含的相同jar文件来编译应用程序:

javac -classpath lib/\* DatabaseDriver.java

lib文件夹包含我的JDBC jar文件。您可以在此文件夹here (json.org)here (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文件的人。

java jdbc
1个回答
0
投票

按照以下说明运行课程:

在基于Unix的系统中

java -cp ".:lib/*" DatabaseDriver

在MS Windows中

java -cp ".;lib/*" DatabaseDriver
© www.soinside.com 2019 - 2024. All rights reserved.