【问题标题】:ClassNotFoundException in JDBC program despite of adding driver's JAR file [duplicate]尽管添加了驱动程序的 JAR 文件,但 JDBC 程序中的 ClassNotFoundException [重复]
【发布时间】:2021-05-09 14:55:47
【问题描述】:

我正在用 Java 编写一个简单的程序,用于演示使用 JDBC 在 MySQL 表中插入数据。但是程序在注册驱动的时候会产生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

【问题讨论】:

  • driver.jar 是 MySQL JDBC 的库吗? “…/driver.jar”后面的分号是什么原因?
  • 而且您知道,当您使用当前版本的 JDBC 驱动程序时,不需要显式注册驱动程序?
  • @tquadrat 是的,它是 MySQL 的 JDBC 驱动程序,后面的分号是因为在设置类路径时,我们使用分号分隔两个不同的类路径。而且我知道没有必要注册驱动程序,但我这样做是因为在创建连接时代码会引发异常。所以我明确注册了驱动程序以确认驱动程序是否正在注册。

标签: java mysql jdbc java-11


【解决方案1】:

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

基于 Windows 的操作系统使用 ; 分隔符,而 基于 Unix 的操作系统使用 : 分隔符。

解决方案:

  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,因为该类已弃用。

【讨论】:

  • B 我试过你的方法,但那又引发了另一个异常。 错误:无法找到或加载主类测试原因:java.lang.ClassNotFoundException:测试
  • @ShashankShekhar 你没有编译。首先按照我展示的方式编译
  • 我现在在问题中附上了截图。请参考。
  • @ShashankShekhar 请分享罐子的路径。完全限定路径
  • 阅读您的评论后,我尝试使用完全合格的路径运行该程序,并且成功了。你的方法奏效了。
【解决方案2】:

1.在类路径的末尾似乎多了一个分号:
/assignment/driver.jar;"
尝试不使用它

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

【讨论】:

  • 为方便起见,我将其重命名。
  • 我尝试不使用分号,现在它引发了一个新的异常。 错误:无法找到或加载主类测试原因:java.lang.ClassNotFoundException:测试
  • 所以这是一个不同的问题/问题 - 可能将目录添加到包含 test.class 到类路径的包中
  • 和冒号:是非Windows系统的分隔符;分号 ; 用于 Windows(因为 : 用于驱动器规格)
  • 其实我之前并不知道。但现在我有了分号分隔符的概念。感谢分享。
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2014-09-27
  • 2013-03-03
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多