JDBC 程序中的 ClassNotFoundException 尽管添加了驱动程序的 JAR 文件

ClassNotFoundException in JDBC program despite of adding driver's JAR file

我正在 Java 中编写一个简单的程序,用于演示使用 JDBC 在 MySQL table 中插入数据。但是程序在注册驱动程序时生成 ClassNotFoundException。

import java.sql.*;

public class test {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch(ClassNotFoundException e) {
            System.out.println("ClassNotFoundException: "+e.getMessage());
        }
    }    
}

我已经在同一目录中添加了驱动程序 JAR 文件。

编译程序:

javac -cp ".:~/Programs/D/friends/assignment/driver.jar;" test.java

执行程序:

java -cp ".:~/Programs/D/friends/assignment/driver.jar;" test

O/p:

ClassNotFoundException: com.mysql.jdbc.Driver

1.at类路径的末尾好像多了一个分号:
/assignment/driver.jar;"
不用它试试

2. 您确定 driver.jar 是正确的文件吗?
通常他们被称为 mysql-connector-java-8.0.23.jar

注意: 问题是由 ; 在 driver.jar 末尾造成的,也没有使用完全限定路径.

Windows 基于 OS 使用 ; 分隔符而基于 Unix OS 使用 : 分隔符。

解法:

  1. 首先编译代码:javac test.java(运行这条命令)

  2. 运行 没有分号的代码:java -cp .:<fully-qualified-path>/driver.jar test

示例输出:

anish@Anishs-MacBook-Pro ~ % javac Test.java
anish@Anishs-MacBook-Pro ~ % java -cp .:/Users/anish/driver.jar Test  
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

注意: 我正在使用 mysql-connector-8.0.15.jar。如果您使用相同或更大的值,则从 com.mysql.jdbc.Driver 更改为 com.mysql.cj.jdbc.Driver,因为 class 已弃用。