指定的类不是驱动程序。无法将 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
下的“服务”选项卡中,我右键单击了Drivers
和New 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 更好的类或库? [关闭]