java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 这是一个Java SQL异常: 用户 'root'@'localhost' 访问被拒绝 (使用密码: YES)

21 浏览
0 Comments

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)

0
0 Comments

这是一个帮助你解决问题的方法:

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).

如果有人在应用这个解决方法后仍然遇到访问被拒绝的问题,你可以应用链接中的解决方案以便简化生活。谢谢。

0
0 Comments

这是针对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用户设置了密码”-如果没有呢?;)

0
0 Comments

问题出现的原因是使用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)的错误时,可以通过确认密码是否正确和检查数据库配置来解决该问题。确保提供正确的密码和数据库名称,或者尝试重新设置密码后重新连接数据库。以上方法应该能够解决这个问题。

0