Java.sql.SQLException: 用户'root'@'localhost'被拒绝访问(使用密码:是)

73
以下代码:
Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");

getConnection() 上抛出此异常:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    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.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(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.<init>(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: Access denied for user 'root'@'localhost' (using password: YES)
    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.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(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)

1
你能否使用 MySQL GUI 客户端(如 SqlYog 或 PhpMyAdmin)连接数据库? - Tomer
1
@ftom2:是的,我可以成功访问phpmyadmin - JAN
1
你确定提供的 用户名密码 是正确的吗?在我看来,似乎没有名为 root 的用户 :( 不太确定,但是难道你不需要像这样提供 数据库名称Connection con = DriverManager.getConnection("jdbc:mysql://localhost;database=mywebsitedb;user=sa;password=thatstrue;"); - nIcE cOw
@GagandeepBali:再想一想:如果登录错误,那么OP怎么能通过phpmyadmin访问它呢? - BalusC
@BalusC:实际上从未使用过 phpmyadmin,虽然有时会使用 SQLServer,但这些字段通常是默认自动填充的,而我们也会忘记它们。这就是为什么那个猜测只是作为评论出现的原因,否则如果我认为这确实是情况(可能是或不是),它可以成为一个回答。但由于您对该评论感到冒犯,如果我再问同样的问题,那我就非常错了,我的错 :-) - nIcE cOw
1
需要确定两件事情-您是否是有效用户,您是否具有执行操作的权限(特权)。权限采用指定主机上的特定特权形式。在引入任何Java之前可以回答这两个问题。个人而言,我会使用命令行连接到指定的用户作为我的sql,例如“mysql -uroot -prootpassword”,然后执行命令“create database mydb”。如果这起作用,您可以删除数据库并转到Java代码。 - Romski
33个回答

-1

我也遇到了这个问题,这个方法解决了它。

更改为:

Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=password";

设置为:

"serverTimezone=UTC""统一标准世界时间""useUnicode=true&characterEncoding=UTF-8""解决中文乱码"

虽然我的数据库没有任何中文字符,但是它可以正常工作。 参考自 https://www.cnblogs.com/EasonJim/p/6906713.html


请格式化您的代码,如果可能,请不要在此处提供外部页面链接。将所有内容直接总结到您的帖子中。谢谢。 - kwoxer

-1

我遇到了这个错误。问题是我使用了错误的数据库名称。


-2

请确保您在使用的端口为:

spring.datasource.url=jdbc:mysql://localhost:8000/database

这与您的计算机上使用的MySQL相同: 在MySQL CLI中使用此命令进行检查:

SHOW VARIABLES WHERE Variable_name = 'port';

1
原帖(我猜是10年前的)显示“拒绝访问”,而不是某种连接失败。因此,端口号不太可能是问题,因为他们必须能够连接才能拒绝凭据。 - Z4-tier
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Japhei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接