【问题标题】:Could not get JDBC connection无法获得 JDBC 连接
【发布时间】:2023-03-09 19:39:01
【问题描述】:

我正在eclipse中制作一个简单的员工测试文件。但它显示了无法获取 JDBC 连接的错误。请帮帮我。

错误是

Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client

XML文件是

<?xml version="1.0" encoding="UTF-8"?>
<bean
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    name="dataSource" p:driverClassName="com.mysql.jdbc.Driver"
    p:url="jdbc:mysql://localhost/mydb" p:username="root"
    p:password="banjit" />
<bean class="org.springframework.jdbc.core.JdbcTemplate"
    name="jdbcTemplate" p:dataSource-ref="dataSource" />

Java 代码是

public class Test {
    public static void main(String[] args) {
        ApplicationContext context =new ClassPathXmlApplicationContext("com/banjit/spring/springjdbc/refconfig.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
        String sql = "insert into employee values (?,?,?)";
        int result = jdbcTemplate.update(sql, new Integer(1), "Banjit","Das");
        System.out.println("Numbers of records inserted  "+result);
    }
}

【问题讨论】:

  • 您的数据库主机是否允许 jdbc?
  • 你有consider[ed] upgrading MySQL client吗?
  • 是的@MWB 它允许
  • 您使用的是哪个版本的 MySQL 以及哪个版本的 MySQL Connector/J?请发布完整的异常堆栈跟踪,而不仅仅是消息。

标签: java mysql spring spring-boot jdbc


【解决方案1】:

要解决这个问题,首选的解决方案是升级所有客户端程序以使用 4.1.1 或更高版本的客户端库。如果这不可行,请使用以下方法之一:

1) 要使用 4.1 之前的客户端程序连接到服务器,请使用仍具有 4.1 之前样式密码的帐户。

2) 为每个需要使用 pre-4.1 客户端程序的用户将密码重置为 pre-4.1 样式。这可以使用 SET PASSWORD 语句和 OLD_PASSWORD() 函数来完成:

mysql> SET PASSWORD FOR
    -> 'user'@'host' = OLD_PASSWORD('new_password');

【讨论】:

  • 建议使用 4.1.1 或更高版本的客户端库很可能是错误的(这些版本很古老)。这里的问题可能是使用 MySQL 8.0 和 MySQL Connector/J 5.1.45 或更低版本的 OP)。然后解决方案是升级到 5.1.46 或更高版本,或者更好地升级到 8.0.13 或更高版本。
猜你喜欢
  • 2016-10-28
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2018-06-04
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多