Eclipse中JDBC连接MySQL报错:Access denied for user 'root'@'localhost'
问题描述
我在Eclipse Java IDE中尝试通过JDBC连接MySQL数据库时,遇到以下错误:
Error: Access denied for user 'root'@'localhost' (using password: YES)
我的DBconnection代码如下:
package language; import java.sql.Connection; import java.sql.DriverManager; public class DBconnection { private static String url="jdbc:mysql://localhost:3306/language"; private static String userName="root"; private static String passWord="rootuser"; public static Connection getConnection() throws Exception{ return DriverManager.getConnection(url,userName,passWord); } }
我执行了查询语句 SELECT Host,User,plugin,authentication_string FROM mysql.user;,结果如下:
+-----------+------------------+-----------------------+------------------------------------------------------------------------+ | Host | User | plugin | authentication_string | +-----------+------------------+-----------------------+------------------------------------------------------------------------+ | localhost | chinnu | mysql_native_password | *88FBBBF3EA3E4189FF5764256AC3B39A15CB2328 | | localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | newuser | mysql_native_password | *F071E3EB4C99F6E1F1CDD5E1031193757E974214 | | localhost | root | mysql_native_password | *992C4DB09F487A275976576CCFA554F7D20A4207 | +-----------+------------------+-----------------------+------------------------------------------------------------------------+
解决办法
核对密码正确性
代码中使用的密码是rootuser,但查询结果里root@localhost的密码哈希值与rootuser的哈希不匹配。- 先通过MySQL客户端直接登录验证:终端输入
mysql -u root -p,输入你认为正确的root密码,若登录失败则说明密码错误。 - 密码错误的话直接重置:
之后把代码里的ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;passWord替换为新密码即可。
- 先通过MySQL客户端直接登录验证:终端输入
确认目标数据库存在
代码URL指向language数据库,执行SHOW DATABASES;查看该数据库是否存在,若不存在则先创建:CREATE DATABASE language;检查JDBC驱动兼容性
你的root用户使用的是mysql_native_password插件(JDBC驱动对该插件支持良好),但需确保JDBC驱动版本与MySQL服务器版本匹配,版本差距过大也可能引发连接问题。验证数据库访问权限
确认root@localhost拥有language数据库的访问权限,执行:SHOW GRANTS FOR 'root'@'localhost';若缺少权限则执行以下语句添加:
GRANT ALL PRIVILEGES ON language.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Charan Kondaveeti
相关产品推荐
相关产品推荐

