指定的 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
下的“服务”选项卡中,我右键单击了 Drivers
和 New 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 驱动可以,但是无法连接到数据库。
- 旁注。使用旧的 5 驱动程序,我在尝试连接到数据库时遇到了 ClassCastException。 BigInt 不能转换为 Long。当我将应用程序中的驱动程序更改为新驱动程序时,问题就消失了。
首先,我在 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
。
如果错误是由时区问题引起的,这应该有效。
我无法在 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...
按钮,然后 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 驱动可以,但是无法连接到数据库。
- 旁注。使用旧的 5 驱动程序,我在尝试连接到数据库时遇到了 ClassCastException。 BigInt 不能转换为 Long。当我将应用程序中的驱动程序更改为新驱动程序时,问题就消失了。
首先,我在 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
。
如果错误是由时区问题引起的,这应该有效。