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


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数据库。

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

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 是一个常见的数据库连接错误,表示用户'root'在本地主机上使用了错误的密码进行连接。 解决这个问题的方法有以下几种: 1. 确保用户名和密码正确:首先,确保你使用的用户名和密码是正确的。检查你的数据库配置文件或者数据库管理工具中的用户名和密码是否与你尝试连接的数据库一致。 2. 检查数据库权限:如果用户名和密码是正确的,但仍然无法连接数据库,可能是因为该用户没有足够的权限访问数据库。请确保该用户具有正确的权限,包括连接数据库和执行所需的操作。 3. 检查数据库连接字符串:检查你的数据库连接字符串是否正确。确保连接字符串中的用户名、密码和数据库名称都是正确的。 4. 检查数据库服务器配置:如果以上方法都没有解决问题,可能是因为数据库服务器的配置有问题。请检查数据库服务器的配置文件,确保允许远程连接,并且没有其他限制。 5. 检查防火墙设置:有时候,防火墙设置可能会阻止数据库连接。请确保你的防火墙允许数据库连接。 6. 重置密码:如果你确信用户名和密码是正确的,但仍然无法连接数据库,可以尝试重置密码。使用数据库管理工具或者命令行工具重置密码,并更新你的应用程序中的连接信息。 这些方法应该能够帮助你解决java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值