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

Posted

技术标签:

【中文标题】指定的类不是驱动程序。无法将 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 【发布时间】:2019-02-25 05:36:18 【问题描述】:

我无法在 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... 按钮并选择新的驱动程序 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 扩展了实现 java.sql.Driver 的 com.mysql.cj.jdbc.Driver 所以我不知道错误是怎么回事。

有人知道如何解决这个问题吗?我尝试了 6.0 驱动程序并得到了同样的错误。 5驱动工作但无法连接DB。

旁注。使用旧的 5 驱动程序时,我在尝试连接到数据库时遇到了 ClassCastException。 BigInt 不能转换为 Long。当我将应用程序中的驱动程序更改为新驱动程序时,问题就消失了。

【问题讨论】:

请注意,MySQL Connector/J 版本 6.0 从未为 GA 发布,这是唯一存在的开发/测试版本。 【参考方案1】:

首先,我在 NetBeans 8.2 上成功使用 mysql-connector-java-8.0.12.jar 作为 MySQL 8.0 的驱动程序,所以它确实有效:

我认为您的问题没有任何明显的原因,但您可以尝试解决一些问题:

在您的新 JDBC 驱动程序屏幕截图中,NetBeans 将驱动程序命名为MySQL(连接器/J 驱动程序)(1)。这大概是因为您已经有一个名为 MySQL(Connector/J 驱动程序) 的驱动程序,而您的第一个屏幕截图证实了这一点。你为什么要为 MySQL 添加第二个驱动程序?如果没有充分的理由,可以删除旧的,然后重新添加驱动吗?

检查 8.0.12 驱动程序的多个实例,并删除文件存储中所有旧的 MySQL 5.x 和 MySQL 8.x 驱动程序,除非您有充分的理由保留其中任何一个。

download page for Connector/J 声明 “我们建议您使用 MD5 校验和和 GnuPG 签名来验证您下载的软件包的完整性”。是你做的吗?您的文件损坏的可能性不大,但有可能。另外,请注意在下载 Windows 驱动程序时必须选择“平台无关”

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

帮助 > 关于 向下滚动并找到缓存目录的路径。 关闭 NetBeans 并删除该目录。 启动 NetBeans 并重试。

检查 NetBeans 日志以了解可能的问题:

重复尝试创建驱动程序。 查看 > IDE 日志并查看日志中的最新条目。

NetBeans 8.0 可能存在问题,因为它相当旧。是否可以升级到 8.2 或 9.0 版本?


根据 OP 的 cmets 反馈进行更新:

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/J 8.0驱动requires Java 8:

它是 Java 8 平台的 MySQL 驱动程序。对于 Java 7 或更早版本, 请改用 Connector/J 5.1。

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

【讨论】:

感谢您的详细回复。您能否检查一下您的 [installpath]\ide\modules\ext 目录中是否有 jar? 1)我删除了旧的 MySQl 驱动程序没有运气 2)我检查了 netbeans 安装目录,只有地方在 etc 目录中,我也从那里删除了。 3) 我检查了 md5 是否匹配,4) 清除缓存没有运气 5) 好的,找到了一些东西。将作为新评论发布。 在日志中找到罪魁祸首。 Netbeans 将默认 JDK 设置为 Java7 将 [netbeansinstallpath]\etc\netbeans.conf 中的 netbeans_jdkhome 更改为指向新的 JDK 8 安装目录来自日志:INFO [org.netbeans.modules.db.explorer.dlg.AddDriverDialog]:出现异常在驱动程序 jar(s) 中搜索 JDBC 驱动程序期间尝试加载类 com.mysql.jdbc.Driver:java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver:不支持的 major.minor 版本 52.0。跳过这门课... 能否请您包含我找到的日志条目并修复您的答案,将“检查 netbeans 日志...”移动到第一件事,并在完成后在评论中提及我,我会接受答案。再次感谢。 好的。我已根据您的有用反馈更新了我的答案。但是,我没有将日志审查移到列表的前面,因为除了更正拼写错误之外,我不喜欢对原始答案进行 原位 更改。相反,我在答案的末尾附加了更新。 关于“你能检查一下你的[安装路径]\ide\modules\ext目录中是否有jar吗?”,我检查了,我没有'吨。司机可以居住在任何地方;它不必在那个 ext 目录中(尽管那肯定是放置它的合理位置)。【参考方案2】:

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

如果错误是由时区问题引起的,这应该可以工作。

【讨论】:

以上是关于指定的类不是驱动程序。无法将 MySQL Connector/J 8.0 添加到 Netbeans 8.0的主要内容,如果未能解决你的问题,请参考以下文章

由于系统错误 126 (MySQL ODBC 5.3 UNICODE Driver),指定驱动程序无法加载。

对于 MySQL 请求,是不是有比 ASyncTask 更好的类或库? [关闭]

mysql Connection能否用于多次查询,是不是会有安全问题

MySQL分页查询

php中session有时候能获取,有时候无法获取。。。

无法评估表达式