加载类“ com.mysql.jdbc.Driver”。不推荐使用。新的驱动程序类为“ com.mysql.cj.jdbc.Driver”。

时间:2018-08-27 04:52:24

标签: mysql jdbc

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

正在加载类com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver'。通过SPI自动注册驱动程序,通常不需要手动加载驱动程序类。

24 个答案:

答案 0 :(得分:16)

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

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

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

希望有帮助

答案 1 :(得分:13)

如果您正在使用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>

那应该做:)

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

这将解决警告:-)

答案 4 :(得分:1)

如下更改了我的 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"
      }
    }
  }
}

答案 5 :(得分:1)

已清除句子“正在加载类'com.mysql.jdbc.Driver'。已弃用。新的驱动程序类为'com.mysql.cj.jdbc.Driver'”。您应该使用更新的驱动程序,如下所示:

  <input
    type="number"
    value={props.number || ""}
    onChange={e => props.updateValue({ number: +e.target.value })}
  />

在mysql-connector-java-8.0.17中。您会发现com.mysql.jdbc.Driver类不再提供服务。 (您也可以从此处找到警告。)

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

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

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,驱动程序会自动注册。它是如何工作的?您可以从java.sql.DriverManager中找到它:

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

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

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

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

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

答案 6 :(得分:0)

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

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

在休眠状态下: <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

答案 7 :(得分:0)

我只将这行代码 Class.forName("com.mysql.jdbc.Driver"); 更改为 Class.forName("com.mysql.cj.jdbc.Driver");。我看到其他一些人会访问 application.properties 并添加一些内容。对我来说,这是最好和最快的方式,但我也尊重其他人的回答。

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

现在你的数据库连接就是按照这个格式创建的。

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();
        }
    }

现在它将执行。

答案 10 :(得分:0)

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

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

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

答案 11 :(得分:0)

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

因为机器抛出警告

通过SPI自动注册驱动程序,通常不需要手动加载驱动程序类。”

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

答案 12 :(得分:0)

如果在Hive中使用新的MySQL连接器8.x(MySQL metastore)看到此消息

打开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>

答案 13 :(得分:0)

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

但是,有一个配置可以自己选择正确的驱动程序。将其放入您的application.properties

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

请参阅有关Github的文档

答案 14 :(得分:0)

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

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

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

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

就我而言,我有一行    Class.forName(“ com.mysql.jdbc.Driver”); 删除此行代码后工作正常 如果您有任何要加载“ com.mysql.jdbc.Driver”的行,请将其删除,

答案 18 :(得分:0)

根据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");

答案 19 :(得分:0)

从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

答案 20 :(得分:0)

工作示例:

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

像这样的呼叫将起作用。

答案 21 :(得分:0)

        // The newInstance() call is a work around for some
        // broken Java implementations
        Class.forName("com.mysql.cj.jdbc.Driver").newInstance();

答案 22 :(得分:0)

in my experience. I was using jsp for web. at that time I use mysql 5 and mysql connecter jar 8. So due to the version problem I face this kind of problem. I solve by replace the mysql connector jar file the exact version mysql.

答案 23 :(得分:0)

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

相反:org.springframework.boot 2.1.0.RELEASE