Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
时间: 2023-10-16 07:32:59 浏览: 165
这个错误通常是由于 MySQL 8.0 版本以上的加密方式更新导致的。在 MySQL 8.0 版本以上,MySQL 默认使用了 RSA 加密方式,而 JDBC 驱动默认使用了 SHA-256 加密方式。当 JDBC 驱动连接 MySQL 8.0 版本以上的数据库时,会出现 Public Key Retrieval is not allowed 的错误。
为了解决这个问题,您可以在连接 MySQL 数据库时,加上一个参数 useSSL=false,以禁用 SSL 协议,例如:
```
jdbc:mysql://localhost:3306/database_name?useSSL=false
```
或者,您可以尝试升级您的 JDBC 驱动版本,以支持 MySQL 8.0 版本以上的加密方式。您可以在 MySQL 官方网站上下载最新的 JDBC 驱动版本,然后将其添加到您的项目中。
相关问题
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. Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed ### The error may exist in mysql/user/mappers/usermapper.xml ### The error may involve mysql.user.mappers.usermapper.selectAll ### The error occurred while executing a query ### Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) at com.sun.proxy.$Proxy4.selectAll(Unknown Source) at org.example.main2.main(main2.java:25) Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) at java.sql.DriverManager.getConnection(Driv
这个问题是因为你正在使用过时的MySQL驱动程序。新的驱动程序类是`com.mysql.cj.jdbc.Driver`。新的驱动程序类会自动通过SPI进行注册,不需要手动加载驱动程序类。此外,你遇到的错误是“Public Key Retrieval is not allowed”,这可能是由于MySQL连接配置的问题引起的。你可以尝试在连接URL中添加`allowPublicKeyRetrieval=true`来解决此问题。例如:
```java
String url = "jdbc:mysql://localhost:3306/database?allowPublicKeyRetrieval=true";
```
请确保将`localhost:3306`替换为您的MySQL服务器主机和端口,`database`替换为您要连接的数据库名称。
Caused by: java.sql.SQLNonTransientConnectionException: No operations allowed after connection closed.
这个错误通常是由于数据库连接在使用后未正确关闭导致的。在使用完数据库连接后,应该显式地关闭连接,以释放资源并避免出现此类异常。可以在代码中使用try-with-resources语句来自动关闭连接,或者在finally块中手动关闭连接。另外,检查连接池配置是否正确,以确保连接池中的连接可以正确地被使用和关闭。
阅读全文