Loading class `com.mysql.jdbc.Driver‘. This is deprecated警告处理,jdbc更新处

声明:使用JDK9、MYSQL8、idea  

1.报错信息是这样的;

处理:提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了、应当使用新的驱动com.mysql.cj.jdbc.Driver'

所以,按照提示更改jdbc.properties配置 .com.mysql.jdbc.Driver  改为  com.mysql.cj.jdbc.Driver

运行结果如下:PS 已经没有这一条报错或者警示了,一条一条处理报错。

2.仍存在报错信息

Fri Sep 07 17:48:01 GMT+08:00 2018 WARN: Establishing SSL connection without server's identity verification 

处理:根据报错我们知道这是时间报错,没有指定明确的时区,是因为新版的mysql会询问是否SSL连接,返回一个Boolean值,我们需要手动指定true或者false。所以再次更改配置文件中的 url 满足其要求即可,如下:

 "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"

       2.1、这里是配置了jdbc.properties,完整配置如下:

jdbc.DriverClassName=com.mysql.cj.jdbc.Driver
jdbc.url =jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false
jdbc.username=root
jdbc.password=root

      2.2、mybatis-config.xml 中引入配置文件、配置数据源如下:

<environments default="development">
 <environment id="development">
  <!-- 使用jdbc事务管理,事务控制由mybatis-->
  <transactionManager type="JDBC" />
  <!-- 数据库连接池,由mybatis管理-->
  <dataSource type="POOLED">
   <property name="driver" value="${jdbc.DriverClassName}" />
   <property name="url" value="${jdbc.url}" />
   <property name="username" value="${jdbc.username}" />
   <property name="password" value="${jdbc.password}" />
  </dataSource>
 </environment>
</environments>

运行结果如下:

3、警告处理

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.ibatis.reflection.Reflector (file:/G:/Develop/20180907am/lib/mybatis-3.4.6.jar) to method java.lang.Class.checkPackageAccess(java.lang.SecurityManager,java.lang.ClassLoader,boolean)
WARNING: Please consider reporting this to the maintainers of org.apache.ibatis.reflection.Reflector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

  1. 译文如下:
  2. 警告:发生了非法的反射访问操作
  3. 警告:通过org.apache. ibatis.com .reflection非法访问。方法java.lang.Class.checkPackageAccess(java.lang.SecurityManager,java.lang.ClassLoader,boolean)
  4. 警告:请考虑向org.apache. ibatistics . reflection.reflector的维护者报告此情况
  5. 警告:使用——非法访问=warn启用进一步的非法反射访问操作的警告
  6. 警告:所有非法访问操作将在未来版本中被拒绝

原因:JDK9的问题,非法反射,用回JDK8就可以了。JDK9版本作为小版本,相对JDK8,以及新出的JDK11这些长期版本来讲、有些许BUG正常,针对这个问题,我看了官方社区,有给出答案说是在未来可能对该问题进行优化处理,并不影响使用;

PS:在框架以后,建议小伙伴都使用JDK8版本开发学习,毕竟好多产品最近更新都已支持到了JDK8、并且、使用重量级的WEB服务器 weblogic 也仅仅支持到JDK8;

 

本文原文地址:https://blog.youkuaiyun.com/weixin_42323802/article/details/82500458

### 如何解决加载 `com.mysql.jdbc.Driver` 类时出现的弃用警告 在现代 MySQL 驱动程序中,加载 `com.mysql.jdbc.Driver` 类已被弃用[^3]。推荐使用新的驱动类 `com.mysql.cj.jdbc.Driver` 作为替代方案。以下详细说明如何解决此问题并提供正确的实现方法。 #### 使用新的驱动类 `com.mysql.cj.jdbc.Driver` MySQL 官方建议使用 `com.mysql.cj.jdbc.Driver` 替代旧版本的驱动类 `com.mysql.jdbc.Driver`。新驱动类不仅解决了弃用问题,还提供了更好的性能和兼容性支持[^3]。 #### 自动注册驱动 从 JDBC 4.0 开始,驱动程序可以通过服务提供者接口(SPI)自动注册,因此手动加载驱动类通常是不必要的。这意味着无需显式调用 `Class.forName("com.mysql.cj.jdbc.Driver")` 来注册驱动程序[^3]。例如: ```java // 不再需要手动加载驱动 // Class.forName("com.mysql.cj.jdbc.Driver"); // 直接通过连接 URL 建立数据库连接 String url = "jdbc:mysql://localhost:3306/实验数据库?serverTimezone=UTC&characterEncoding=utf8"; String user = "root"; String password = "123456"; try (Connection connection = DriverManager.getConnection(url, user, password)) { System.out.println("数据库连接成功!"); } catch (SQLException e) { e.printStackTrace(); } ``` #### 数据库连接池配置 如果项目中使用了数据库连接池(如 Tomcat 数据源连接池),确保在配置文件中指定正确的驱动类名称。例如,在 `db.properties` 文件中更新驱动类为 `com.mysql.cj.jdbc.Driver`[^1]: ```properties driverName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/实验数据库?serverTimezone=UTC&characterEncoding=utf8 user=root password=123456 MaxActive=5 MinIdle=2 InitialSize=3 ``` 同时,确保项目依赖中包含正确的 MySQL 驱动包版本。例如,在 Maven 项目的 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 确保使用最新版本 --> </dependency> ``` #### SQL 注入与事务管理 除了替换驱动类外,还需注意防止 SQL 注入问题以及正确管理事务[^2]。使用预处理语句(PreparedStatement)可以有效避免 SQL 注入风险。例如: ```java String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; try (Connection connection = DriverManager.getConnection(url, user, password); PreparedStatement preparedStatement = connection.prepareStatement(sql)) { preparedStatement.setString(1, "John Doe"); preparedStatement.setString(2, "john@example.com"); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } ``` 此外,通过设置事务的隔离级别和提交策略,可以确保数据的一致性和完整性[^2]。 ### 总结 通过使用新的驱动类 `com.mysql.cj.jdbc.Driver` 并利用 JDBC 的自动注册功能,可以有效解决加载 `com.mysql.jdbc.Driver` 类时出现的弃用警告。同时,确保项目依赖和配置文件中的驱动类名称保持一致,并采用最佳实践来提高代码的安全性和性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值