赞
踩
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
这个异常通常表示在尝试使用
root
用户和提供的密码从本地主机 (
localhost
) 连接到MySQL数据库时,认证失败了。以下是对该问题的详细分析、报错原因、解决思路以及解决方法,并附带代码示例。
当Java程序尝试通过JDBC连接到MySQL数据库时,它必须提供正确的用户名和密码。如果提供的凭据不正确,或者用户没有从当前主机连接到数据库的权限,就会抛出这个异常。
root
用户的密码不匹配。root
用户可能没有从 localhost
连接的权限,或者权限被撤销了。user
表可能损坏或不一致,导致认证失败。root
用户是否有从 localhost
连接的权限。user
表有问题,可以尝试修复或重新创建它。下滑查看解决方法
确保你在Java代码中使用的密码与MySQL数据库中 root
用户的密码完全一致。
你可以通过登录MySQL命令行客户端来检查 root
用户的权限:
mysql -u root -p
输入密码后,执行以下SQL查询来检查权限:
SELECT host, user FROM mysql.user WHERE user='root';
确认 host
列中包含 localhost
。
如果密码丢失或错误,你需要以管理员身份登录MySQL,然后重置 root
用户的密码。这里有一个常见的方法,假设你有权限以无密码方式登录MySQL(例如,通过 sudo
或其他方式):
sudo mysqld_safe --skip-grant-tables &
mysql -u root
然后,在MySQL命令行中执行以下SQL命令来重置密码:
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');
记住替换 '新密码'
为你想要设置的新密码。
如果你怀疑用户表损坏,可以尝试使用 mysql_upgrade
命令或重新创建用户表。但请注意,这通常是高级操作,并且可能导致数据丢失,因此在进行此操作之前,请确保已备份所有重要数据。
一旦你有了正确的密码和确认了用户权限,你可以在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数据库。
最后,出于安全考虑,强烈建议不要在代码中硬编码数据库密码,而是使用环境变量或配置文件来管理敏感信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。