java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 这是一个Java SQL异常: 用户 'root'@'localhost' 访问被拒绝 (使用密码: YES)
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 这是一个Java SQL异常: 用户 'root'@'localhost' 访问被拒绝 (使用密码: YES)
以下代码:
Class.forName("com.mysql.jdbc.Driver"); Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
在getConnection()
时抛出以下异常:
java.sql.SQLException: 用户'root'@'localhost'被拒绝访问(使用密码:是) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:813) at com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at db.Database. (Database.java:91) at db.Main.main(Main.java:10)
这是由什么原因引起的,我该如何解决?
编辑:
public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException { try { Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); Statement s = (Statement) conn.createStatement(); int result = s.executeUpdate("CREATE DATABASE databasename"); } catch ( Exception e) { e.printStackTrace(); } }
产生以下结果:
java.sql.SQLException: 用户'root'@'localhost'被拒绝访问(使用密码:是) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:813) at com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at db.Main.main(Main.java:19)
这是一个帮助你解决问题的方法:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;
你可以在命令行或一些图形界面工具中执行这个命令。
不要忘记用真实的密码替换%password%
。
我已经成功执行了这个查询,但仍然无法摆脱这个错误。
上面的解决方法是否也适用于下面的这个问题?这里用的是IP地址而不是localhost:java.sql.SQLException: Access denied for user ''@'1.1.22.85' (using password: YES).
如果有人在应用这个解决方法后仍然遇到访问被拒绝的问题,你可以应用链接中的解决方案以便简化生活。谢谢。
这是针对Ubuntu 18.04 LTS和MySQL 5.x的特定问题。
按照以下链接中的步骤进行操作:link
从这里开始按照以下步骤进行操作:
sudo mysql_secure_installation sudo mysql
一旦登录到MySQL,然后从MySQL提示符执行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;
现在验证表中是否为root用户设置了密码:
SELECT user,authentication_string,plugin,host FROM mysql.user;
这样解决了我的问题,现在我可以登录了。
“现在验证表中是否为root用户设置了密码”-如果没有呢?;)
问题出现的原因是使用root用户在localhost上连接数据库时,密码验证失败。解决方法是确保提供正确的密码。
文章标题:解决java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题
问题描述:
在使用root用户连接数据库时,突然出现了java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的错误。
解决方法:
根据论坛上的讨论,可以尝试以下解决方法:
1. 确保提供正确的密码。在代码中,使用的是root用户和rootpassword作为密码连接数据库。确认密码是否正确,并检查是否有其他特殊字符导致密码错误。可以尝试修改密码后重新连接数据库。
2. 检查数据库配置。确保连接字符串中的数据库名称正确,如果没有指定数据库名称,则不需要提供databaseName。可以尝试使用以下代码连接数据库:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename"); int result = ps.executeUpdate();
通过以上方法,应该能够解决java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题。
当使用root用户在localhost上连接数据库时,出现java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的错误时,可以通过确认密码是否正确和检查数据库配置来解决该问题。确保提供正确的密码和数据库名称,或者尝试重新设置密码后重新连接数据库。以上方法应该能够解决这个问题。