首页 > 基础资料 博客日记

亲测有效 Java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方法

2024-09-30 21:00:07基础资料围观12

Java资料网推荐亲测有效 Java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方法这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣


java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 这个异常通常表示在尝试使用 root 用户和提供的密码从本地主机 ( localhost) 连接到MySQL数据库时,认证失败了。以下是对该问题的详细分析、报错原因、解决思路以及解决方法,并附带代码示例。

问题分析

当Java程序尝试通过JDBC连接到MySQL数据库时,它必须提供正确的用户名和密码。如果提供的凭据不正确,或者用户没有从当前主机连接到数据库的权限,就会抛出这个异常。

报错原因

  1. 密码错误:提供的密码与数据库中 root 用户的密码不匹配。
  2. 用户权限问题root 用户可能没有从 localhost 连接的权限,或者权限被撤销了。
  3. MySQL用户表问题:MySQL的 user 表可能损坏或不一致,导致认证失败。

解决思路

  1. 确认密码:首先确保你使用的密码是正确的。
  2. 检查用户权限:检查 root 用户是否有从 localhost 连接的权限。
  3. 重置密码:如果密码丢失或忘记,可以通过MySQL的安全模式重置密码。
  4. 修复用户表:如果怀疑 user 表有问题,可以尝试修复或重新创建它。

解决方法

下滑查看解决方法

1. 确认密码

确保你在Java代码中使用的密码与MySQL数据库中 root 用户的密码完全一致。

2. 检查用户权限

你可以通过登录MySQL命令行客户端来检查 root 用户的权限:

mysql -u root -p

输入密码后,执行以下SQL查询来检查权限:

SELECT host, user FROM mysql.user WHERE user='root';

确认 host 列中包含 localhost

3. 重置密码

如果密码丢失或错误,你需要以管理员身份登录MySQL,然后重置 root 用户的密码。这里有一个常见的方法,假设你有权限以无密码方式登录MySQL(例如,通过 sudo 或其他方式):

sudo mysqld_safe --skip-grant-tables &
mysql -u root

然后,在MySQL命令行中执行以下SQL命令来重置密码:

FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

记住替换 '新密码' 为你想要设置的新密码。

4. 修复用户表

如果你怀疑用户表损坏,可以尝试使用 mysql_upgrade 命令或重新创建用户表。但请注意,这通常是高级操作,并且可能导致数据丢失,因此在进行此操作之前,请确保已备份所有重要数据。

5. 在Java代码中使用正确的凭据

一旦你有了正确的密码和确认了用户权限,你可以在Java代码中使用这些凭据来建立连接:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "新密码"; // 使用你刚刚设置的新密码

        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("连接成功!");
            // 使用连接执行操作...
            conn.close(); // 记得关闭连接
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("连接失败:" + e.getMessage());
        }
    }
}

确保替换 数据库名新密码 为实际的数据库名和新密码。如果一切配置正确,代码应该能成功连接到MySQL数据库。

最后,出于安全考虑,强烈建议不要在代码中硬编码数据库密码,而是使用环境变量或配置文件来管理敏感信息。


文章来源:https://blog.csdn.net/PythonAigc/article/details/138256283
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云