加载类“com.mysql.jdbc.Driver”。这已被弃用。新的驱动程序类是`com.mysql.cj.jdbc.Driver' [重复]

Posted

技术标签:

【中文标题】加载类“com.mysql.jdbc.Driver”。这已被弃用。新的驱动程序类是`com.mysql.cj.jdbc.Driver\' [重复]【英文标题】:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver' [duplicate]加载类“com.mysql.jdbc.Driver”。这已被弃用。新的驱动程序类是`com.mysql.cj.jdbc.Driver' [重复] 【发布时间】:2019-02-01 14:29:37 【问题描述】:

这是我进入控制台的警告,我对这个警告感到困惑:

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.

【问题讨论】:

【参考方案1】:

删除配置文件中的行 application.properties

因为spring说:驱动是通过SPI自动注册的,一般不需要手动加载驱动类。

【讨论】:

【参考方案2】:
 Class.forName("com.mysql.jdbc.Driver"); //it's old the mysql driver 
 

将旧驱动程序更改为新驱动程序 -------------------------

 Class.forName("com.mysql.cj.jdbc.Driver"); //it's new the mysql driver and paste same place and resolved your problem 

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:

如下更改了我的 application.conf 文件。它解决了这个问题。

变更前:

slick 
  dbs 
    default 
      profile = "slick.jdbc.MySQLProfile$"
      db 
        driver = "com.mysql.jdbc.Driver"
        url = "jdbc:mysql://localhost:3306/test"
        user = "root"
        password = "root"
      
    
  

更改后:

slick 
  dbs 
    default 
      profile = "slick.jdbc.MySQLProfile$"
      db 
        **driver = "com.mysql.cj.jdbc.Driver"**
        url = "jdbc:mysql://localhost:3306/test"
        user = "root"
        password = "root"
      
    
  

【讨论】:

【参考方案4】:

我只是把这行代码Class.forName("com.mysql.jdbc.Driver");改成了Class.forName("com.mysql.cj.jdbc.Driver");。我看到其他一些人去 application.properties 并添加了一些东西。对我来说这是最好和最快的方式,但我也尊重其他人的回答。

【讨论】:

【参考方案5】:

请删除 application.properties 文件中现有的 spring.datasource.driver-class-name 属性并添加以下属性。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

【讨论】:

【参考方案6】:

现在你根据这个格式创建数据库连接。

public void Connect() 
        try 
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/JavaCRUD","root","");
        catch(ClassNotFoundException ex) 
            
         catch (SQLException ex) 
            // TODO Auto-generated catch block
            ex.printStackTrace();
        
    

像这样编辑这段代码。

    public void Connect() 
        try 
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/JavaCRUD","root","");
        catch(ClassNotFoundException ex) 
            
         catch (SQLException ex) 
            // TODO Auto-generated catch block
            ex.printStackTrace();
        
    

现在它将执行。

【讨论】:

【参考方案7】:

如果你的 application.properties 中有这个:

spring.datasource.driverClassName=com.mysql.jdbc.Driver,

您可以通过删除该行来消除错误。

【讨论】:

【参考方案8】:

只需从您的代码中删除这部分 Class.forName("com.mysql.jdbc.Driver")

因为机器正在抛出警告

驱动是通过SPI自动注册的,一般不需要手动加载驱动类。"

意味着不需要包含它,因为默认情况下会自动为您注册驱动程序。

【讨论】:

然后它说没有找到适合 jdbc:mysql 的驱动程序【参考方案9】:

如果在带有新 MySQL 连接器 8.x(MySQL 元存储)的 Hive 中看到此消息

打开hive-site.xml 并更改:

   <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>MySQL JDBC driver class</description>
   </property>

   <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.cj.jdbc.Driver</value>
      <description>MySQL JDBC driver class</description>
   </property>

【讨论】:

【参考方案10】:

如果您直接使用 log4jdbc-spring-boot-starter 库,也会出现此警告。

但是有一个配置可以自己选择正确的驱动程序。把它放在你的application.properties

log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.auto.load.popular.drivers=false

请参阅Github 上的文档

【讨论】:

【参考方案11】:

我正在使用 Eclipse 并在 META_INF/context.xml 中定义了 MySql 连接池。其部分内容为:

<Context>
  <Resource name="..." 
    driverClassName="com.mysql.jdbc.Driver" 
    ... />
</Context>

当我如下更改以“driverClassName”开头的行时,问题就消失了。

driverClassName="com.mysql.cj.jdbc.Driver"

【讨论】:

为 Intellij IDEA 2020.2 复制了相同的内容。这个建议是相关的,因为属性文件是正确的。【参考方案12】:

驱动程序是通过 SPI 自动注册的,通常不需要手动加载驱动程序类。只需更改“com.mysql.cj.jdbc.Driver”

【讨论】:

【参考方案13】:

“Loading class 'com.mysql.jdbc.Driver'. This is deprecated. the new driver class is 'com.mysql.cj.jdbc.Driver'”这句话很清楚。您应该使用较新的驱动程序,如下所示:

Class.forName("com.mysql.cj.jdbc.Driver");

在 mysql-connector-java-8.0.17 中。您会发现 com.mysql.jdbc.Driver 类不再提供服务。 (您也可以发现警告来自这里。)

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.");
    

“驱动程序是通过SPI自动注册的,通常不需要手动加载驱动程序类”这句话。意思是这样写代码是可以的:

//Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/world?useSSL=false&serverTimezone=Asia/Shanghai","root","root");

由于 SPI,驱动程序是自动注册的。它是如何工作的?你可以从 java.sql.DriverManager 找到这个:

private static void ensureDriversInitialized() 
                          ...
    ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
                          ...

并且在您的 mysql-connector-java-XXX.jar 中,您还可以在 META-INF\services 中找到文件“java.sql.Driver”。文件如下:

com.mysql.cj.jdbc.Driver

当您运行 DriverManager.getConnection() 时,静态块也开始运行。因此驱动程序可以自动注册到文件'java.sql.Driver'中。

关于 SPI 的更多信息 -> Difference between SPI and API?。

【讨论】:

【参考方案14】:

如果使用基于 YML 文件的配置,以下将是需要在给定文件中调整的属性:

*driverClassName: com.mysql.cj.jdbc.Driver*

【讨论】:

【参考方案15】:

通过将驱动名称从“com.mysql.jdbc.Driver”更改为“com.mysql.cj.jdbc.Driver”即可解决此问题。

如果是简单的 JDBC 连接: Class.forName("com.mysql.cj.jdbc.Driver");

在休眠的情况下: &lt;property name="driver" value="com.mysql.cj.jdbc.Driver"/&gt;

【讨论】:

【参考方案16】:

就我而言,我有一条线 Class.forName("com.mysql.jdbc.Driver"); 删除此行代码后工作正常 如果你有任何加载“com.mysql.jdbc.Driver”的行删除它,它不再需要了

【讨论】:

【参考方案17】:

根据Changes in the Connector/J API "MySQL Connector/J 中实现java.sql.Driver 的类的名称已从com.mysql.jdbc.Driver 更改为com.mysql。 cj.jdbc.Driver。旧的类名已被弃用。”

这意味着您只需要更改驱动程序的名称:

Class.forName("com.mysql.jdbc.Driver");

Class.forName("com.mysql.cj.jdbc.Driver");

【讨论】:

【参考方案18】:

从 5.1 版到 8.0 版,Connector/J API 发生了重要变化。如果您使用的版本低于 5.1,您可能需要相应地调整 API 调用。

请通过以下链接访问 MySQL 以获取更多信息https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html

【讨论】:

【参考方案19】:

根据我的经验。我正在使用jsp for web。当时我使用mysql 5和mysql连接器jar 8。所以由于版本问题我面临这种问题。我通过将mysql连接器jar文件替换为确切版本的mysql来解决。

【讨论】:

【参考方案20】:

工作示例:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db_name?autoReconnect=true&useSSL=false", "root", "root");

这样调用它会起作用的。

【讨论】:

【参考方案21】:

更改 ORM 配置文件中的驱动程序属性
 <property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="driver" value="com.mysql.cj.jdbc.Driver"/>

这将解决警告:-)

【讨论】:

【参考方案22】:
        // The newInstance() call is a work around for some
        // broken Java implementations
        Class.forName("com.mysql.cj.jdbc.Driver").newInstance();

【讨论】:

拜托,你能用详细的解释来扩展你的答案吗?这对于理解您的想法非常有用。谢谢! Class.forName("com.mysql.cj.jdbc.Driver").newInstance() 在这段代码中,.newInstance() 方法是中断的实现。这个链接更有帮助 [dev.mysql.com/doc/connector-j/8.0/en/…@vezunchik【参考方案23】:

这是因为要连接的mysql版本低于mysql驱动的版本。 很多人说 com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver ,虽然这并不能解决问题,但也应该引起注意。

【讨论】:

这为我解决了。虽然在我的情况下,其他错误消息确实说 'com.mysql.cj.jdbc'【参考方案24】:

我通过更改application.properties 解决了这个问题

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

希望对你有帮助

【讨论】:

【参考方案25】:

我的解决方案: org.springframework.boot 2.0.5.RELEASE

而是:org.springframework.boot 2.1.0.RELEASE

【讨论】:

【参考方案26】:

如果您使用的是 Hibernate,请在“hibernate.cfg.xml”中更改以下内容:

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

收件人:

<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>

应该这样做:)

【讨论】:

以上是关于加载类“com.mysql.jdbc.Driver”。这已被弃用。新的驱动程序类是`com.mysql.cj.jdbc.Driver' [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法加载驱动程序类:com.mysql.jdbc.Driver Spring Boot

从 2.6 升级到 3.7 时,BIRT JDBCException“无法加载 JDBC 驱动程序类:com.mysql.jdbc.Driver”

无法加载驱动程序类:com.mysql.jdbc.Driver 与 Gradle 和 Spring Boot

Oozie - 运行 sqoop 时出现异常:无法加载数据库驱动程序类:com.mysql.jdbc.Driver

JDBC原理

jdbc连接一些问题和常规操作