我正在创建一个使用JDBC的应用程序,当前在不获取java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
的情况下运行代码时遇到问题。我已经对尝试解决此问题进行了广泛的研究,但我尝试过的所有工作似乎都没有效果。
例如,我想指出,当从我的IDE(intellij)运行我的代码时,它可以正常工作。数据库连接有效,并且所有查询在必要时执行。当我尝试在终端中使用javac
和java
进行编译和运行时,就会出现问题。因为这是一个学校项目,所以我需要使我的教授能够在本地运行它。
第二,我使用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文件的人。
按照以下说明运行课程:
在基于Unix的系统中
java -cp ".:lib/*" DatabaseDriver
在MS Windows中
java -cp ".;lib/*" DatabaseDriver