为何MySQL连接提示权限拒绝?报错:Access denied for user 'root'@'localhost'
解决MySQL JDBC权限拒绝错误(Access denied for user 'root'@'localhost')
错误原因拆解
错误提示java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)直接说明两个问题:
- JDBC尝试无密码连接MySQL,但你的
root用户要么设置了密码,要么MySQL不允许无密码登录。 - 你的代码存在语法错误:
getConnection方法的第三个参数引号未闭合(""写成了"),这会导致编译失败。
修复步骤
1. 先修正代码语法问题
把getConnection的第三个参数引号补全,保证字符串格式合法:
con1=DriverManager.getConnection("jdbc:mysql://localhost/schoolmanagementdb","root","");
如果你的root用户有密码,直接把空字符串替换成实际密码,比如"123456"。
2. 匹配MySQL用户的登录规则
- 若
root用户设置了密码:必须在JDBC连接中填入正确密码,示例:
// 假设root密码为123456 con1=DriverManager.getConnection("jdbc:mysql://localhost/schoolmanagementdb","root","123456");
- 若要无密码登录:先确认MySQL允许
root无密码访问,登录MySQL控制台执行以下命令:
-- 查看root用户的密码状态 SELECT user, host, authentication_string FROM mysql.user WHERE user='root';
如果authentication_string不为空,说明该用户有密码,可重置为无密码(仅测试环境推荐):
ALTER USER 'root'@'localhost' IDENTIFIED BY ''; FLUSH PRIVILEGES;
3. 额外注意事项
- 确认MySQL服务处于运行状态。
- 检查
schoolmanagementdb数据库是否存在,否则会触发数据库不存在的错误。 - 若使用MySQL 8.0+,建议更换新版驱动并指定时区:
Class.forName("com.mysql.cj.jdbc.Driver"); con1=DriverManager.getConnection("jdbc:mysql://localhost/schoolmanagementdb?serverTimezone=UTC","root","your_password");
内容的提问来源于stack exchange,提问作者Rareş-Horia Panait
相关产品推荐
相关产品推荐

