JDBC / MYSQL:java.sql.SQLException:用户'root'@'localhost'拒绝访问(使用密码:NO)

时间:2011-11-16 06:30:33

标签: mysql jdbc

使用此代码

String url = "jdbc:mysql://localhost/mysql";
Connection con = DriverManager.getConnection(url, "root", "");

我收到以下异常。

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    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:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at MyTest1.main(MyTest1.java:29)

我使用root命令工具登录数据库,没有密码。我能够telnet到数据库,我收到此消息

N
 5.5.17-log
           7{*Zj%u☻ǧ|tR}=Vz'L,6imysql_native_password"

3 个答案:

答案 0 :(得分:0)

'root'@'localhost''root'@'%'不同。它可能仍然是权限问题。

我建议您通过控制台登录,使用密码创建'test'@'%'用户,并授予其所有权限。您可以了解如何执行此操作here

答案 1 :(得分:0)

我的MYSQL安装遇到了一些问题。我卸载了我正在使用的AMP软件包并安装了XAMPP,它可以工作。

答案 2 :(得分:0)

即使我也面临同样的问题。但是,在我的应用程序中,我做了一个错误,就像我忘了给密码。您可以尝试手动登录MySQL并检查用于登录的用户名和密码。您可以在URL中使用相同的详细信息。最好还提供数据库名称。如下所示 对于MySQL:

String url = "jdbc:mysql://localhost:3306/mysql";
Connection con = DriverManager.getConnection(url, "root", "");

在上面,你忘了给出MySQL的端口号。一旦你的MySQL有端口号,你可以检查。默认情况下,mySQL端口号为3306.更好地创建和使用自己的数据库。

如果上面的那个不起作用,请尝试GRANT对使用数据库的root用户的所有权限。要授予所有权限,以下是查询

GRANT ALL PRIVILEGES ON mysql.* TO 'root'@'localhost' WITH GRANT OPTION;

或者

GRANT ALL PRIVILEGES ON mysql.* TO 'root'@'localhost' IDENTIFIED BY 'root';