1. ホーム
  2. マイスル

解決済み: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException

2022-02-27 23:44:16
<パス

IDEAのMySQLドライバを使用したデータベースへの接続に問題があります。

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
### The error may exist in com/itheima/dao/IUserDao.xml
### The error may involve com.hrx.dao.IUserDao.findAll
### The error occurred while executing a query
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
	at org.apache.ibatis.exceptions.Exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
	at com.sun.proxy.$Proxy2.findAll(Unknown Source)
	at com.itheima.test.MybatisTest.main(MybatisTest.java:27)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.Util.getInstance(Util.java:381)

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	getConnection(DriverManager.java:208) at java.sql.DriverManager.getConnection(DriverManager.java:208)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:93)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:404)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:90)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:139)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:61)

	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
	... 6 more

Process finished with exit code 1



次に、エラーメッセージに基づいて、MySQL ドライバのバージョン番号を確認します。

MySQLのバージョンは8.0ですが、バージョンの不一致の問題のはずです。図のバージョンを8.0.20に変更して再度実行してください。


再び例外が文字化けします。プロンプトに従ってタイムゾーンを変更し、URLアドレスに ?serverTimezone=UTC を追加して再度実行します。

クエリ文は有効ですが、使用したドライバクラスが古いというエラーが発生することを確認してください。
元のドライバは

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


変更後、正常に動作するようになりました

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


<イグ

簡単な3ステップで
1. mysqlのバージョンに対応するドライバを選択します。
2. urlの後にタイムゾーンを追加します。?serverTimezone=UTC
3. 3.ドライバのクラス名を変更する: com.mysql.cj.jdbc.

あれからMySQLは久しぶりですね~~~~~。