指定的 Class 不是驱动程序。无法将 MySQL Connector/J 8.0 添加到 Netbeans 8.0

Specified Class is not a Driver. Can't add MySQL Connector/J 8.0 to Netbeans 8.0

我无法在 Netbeans 中设置 MySQL 8.0 jdbc 驱动程序。有人可以帮忙吗?

我的 Netbeans 8.0 IDE 是使用旧版本的 MySQL JDBC 驱动程序 5.1.23 设置的。我将 MySQL 升级到 8.0 并尝试在 Netbeans 中设置一个新的 JDBC 驱动程序,因为旧驱动程序无法连接到新数据库(*请参阅末尾的注释)。

这些是我遵循的步骤。

第 1 步: 我从 D:\Program Files\NetBeans 8.0\ide\modules\ext 中删除了旧的 mysql 驱动程序 jar 文件并复制了新的 mysql-connector-java-8.0.12.jar 文件并重新启动了 IDE.

第 2 步:Databases 下的“服务”选项卡中,我右键单击了 DriversNew Driver...

第 3 步: 在出现的对话框中,我单击 Add... 按钮,然后 select 新的驱动程序 jar D:\Program Files\NetBeans 8.0\ide\modules\ext\mysql-connector-java-8.0.12.jar

此时 Driver Class 自动填充 com.mysql.jdbc.Driver 并且我无法点击 OK 按钮,因为有消息 Specified class is not a driver (java.sql.Driver)

我尝试将其更改为 com.mysql.cj.jdbc.Driver,但它仍然显示相同的信息。

我从 jar 文件中反编译 com.mysql.jdbc.Driver 得到了这个:

package com.mysql.jdbc;

import java.io.PrintStream;
import java.sql.SQLException;

public class Driver
  extends com.mysql.cj.jdbc.Driver
{
  public Driver()
    throws SQLException
  {}

  static
  {
    System.err.println("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.");
  }
}

并且 com.mysql.cj.jdbc.Driver 我得到了这个

package com.mysql.cj.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver
  extends NonRegisteringDriver
  implements java.sql.Driver
{
  public Driver()
    throws SQLException
  {}

  static
  {
    try
    {
      DriverManager.registerDriver(new Driver());
    }
    catch (SQLException E)
    {
      throw new RuntimeException("Can't register driver!");
    }
  }
}

所以 com.mysql.jdbc.Driver 扩展 com.mysql.cj.jdbc.Driver 实现 java.sql.Driver 所以我不知道错误是什么。

有人知道如何解决这个问题吗?我尝试了 6.0 驱动程序并得到了同样的错误。 5 驱动可以,但是无法连接到数据库。

首先,我在 NetBeans 8.2 上成功地使用 mysql-connector-java-8.0.12.jar 作为 MySQL 8.0 的 driver,所以它绝对有效:

我看不出你的问题有任何明显的原因,但你可以尝试一些方法来解决这个问题:

  • 在您的 New JDBC Driver 屏幕截图中,NetBeans 正在命名 driver MySQL (Connector/J driver) (1)。大概是因为你已经有一个名为 MySQL (Connector/J driver)[=73= 的 driver ],您的第一个屏幕截图证实了这一点。为什么要为 MySQL 添加第二个 driver?如果没有充分的理由,你能不能把旧的删掉,然后再尝试添加driver?

  • 检查 8.0.12 的多个实例 driver,并删除任何旧的 MySQL 5.x 和 MySQL 8.x drivers 在你的文件存储中,除非你有充分的理由保留它们中的任何一个。

  • download page for Connector/J 表示 "We suggest that you use the MD5 checksums and GnuPG signatures to verify the integrity of the packages you download"。是你做的吗?您的文件损坏的可能性不大,但有可能。另请注意,下载 driver for Windows 时必须 select "Platform Independent"

  • NetBeans 可能正在缓存导致此问题的内容。这只是我的一个疯狂而绝望的猜测,没有任何证据支持它,但您可以轻松安全地删除缓存以消除它的可能性:

    • 帮助 > 关于
    • 向下滚动并找到缓存目录的路径。
    • 关闭 NetBeans 并删除该目录。
    • 启动 NetBeans 并重试。
  • 检查 NetBeans 日志以了解可能的问题:

    • 重复尝试创建 driver。
    • 查看 > IDE 日志 并查看日志中的最新条目。
  • NetBeans 8.0 可能存在问题,因为它相当旧。是否可以升级到 8.2 或 9.0 版本?


根据 OP 评论中的反馈更新:

OP 报告问题的原因由 NetBeans 日志中的这条消息给出:

INFO [org.netbeans.modules.db.explorer.dlg.AddDriverDialog]: Got an
exception trying to load class com.mysql.jdbc.Driver during search for
JDBC drivers in driver jar(s): java.lang.UnsupportedClassVersionError:
com/mysql/jdbc/Driver : Unsupported major.minor version 52.0. Skipping
this class...

Connector/J8.0driverrequires Java 8:

It is a MySQL driver for the Java 8 platform. For Java 7 or earlier, use Connector/J 5.1 instead.

因此在 netBeans.conf 中将 NetBeans 的默认平台从 JDK 7 更新到 JDK 8 解决了这个问题。

使用 Connection Properties 按钮并添加 属性 字段名称 serverTimezone 和值 UTC

如果错误是由时区问题引起的,这应该有效。