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

时间:2018-09-20 20:45:09

标签: mysql jdbc netbeans netbeans-8 mysql-connector

我无法在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...

Netbeans Database Drivers

步骤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)按钮

enter image description here

我尝试将其更改为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驱动程序有效,但无法连接到数据库。

  • 旁注。使用旧的5驱动程序时,尝试连接数据库时出现ClassCastException。 BigInt无法转换为Long。当我将应用程序中的驱动程序更改为新的驱动程序时,该问题消失了。

2 个答案:

答案 0 :(得分:1)

首先,我成功地将mysql-connector-java-8.0.12.jar用作NetBeans 8.2上MySQL 8.0的驱动程序,因此它肯定可以工作:

mySqlDriver

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

  • 在您的新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中评论的反馈进行更新:

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可以解决此问题。

答案 1 :(得分:0)

使用Connection Properties按钮并添加一个属性,其属性为字段名称serverTimezone和值UTC

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