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

ops/2024/9/23 18:00:27/

文章目录

      • 问题分析
      • 报错原因
      • 解决思路
      • 解决方法
        • 1. 确认密码
        • 2. 检查用户权限
        • 3. 重置密码
        • 4. 修复用户表
        • 5. 在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用户表问题:MySQLuser 表可能损坏或不一致,导致认证失败。

解决思路

  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代码中使用这些凭据来建立连接:

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

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


http://www.ppmy.cn/ops/87646.html

相关文章

Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer...问题解决

Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer...问题解决 1 背景说明2 报错原因3 解决方法4 补充说明 1 背景说明 最近需要在Conda虚拟环境下运行ROS相关代码,其中在运行代码import moveit_commander时,返回报错ImportError: /…

【C++】stack和queue的模拟实现 双端队列deque的介绍

🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 🌈前言🔥stack的模拟实现🔥queue的模拟实现🔥deque(双端队列)deque的缺陷 🌈为什么选择…

【AI 大模型】OpenAI 接口调用 ① ( 安装 openai 软件包 | 查看 openai 软件包版本 | PyCharm 中开发 Python 程序调用 OpenAI 接口 )

文章目录 一、安装 Python SDK二、安装 OpenAI Python SDK1、安装 openai 软件包2、查看 openai 软件包版本3、openai 接口参考文档 三、PyCharm 中开发 Python 程序调用 OpenAI 接口1、PyCharm 创建 Python 项目2、API Key 配置用法3、GPT3 模型和 GPT4 模型4、Python 代码示例…

java常见面试题(160道)

1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了…

【Java】还不懂this关键字?一分钟彻底弄懂this关键字

博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 问题:为什么会存在this? 在上一篇【JavaSE】一文看懂构造器/构造方法(Cunstructor)中,我们已…

Java中的Heap(堆)(如果想知道Java中有关堆的知识点,那么只看这一篇就足够了!)

前言:(Heap)是一种特殊的完全二叉树,它在诸多算法中有着广泛的应用,本文将详细介绍Java中的堆。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大…

【c++】继承学习(一):继承机制与基类派生类转换

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习继承部分 目录 1.继承的概念和定义继承的定义继承基类成员的访问方式变化 2.基类和派生类对象赋值转换3.继承中的作用域 1.继承的概念和定义 …

Anaconda安装-超详细版(2023)

Anaconda安装 - 超详细版(2023) 前言:彻底卸载pythonAnaconda下载地址安装详细步骤配置环境变量检验安装是否成功更改conda源(后续安装第三方库可以加快速度)超详细彻底卸载Anaconda教程Tensorflow-gpu 安装 前言&…