加载类“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");
在休眠的情况下:
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
【讨论】:
【参考方案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