Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拒绝用户访问';管理员'@';本地主机';(使用密码:是)_Java_Mysql - Fatal编程技术网

Java 拒绝用户访问';管理员'@';本地主机';(使用密码:是)

Java 拒绝用户访问';管理员'@';本地主机';(使用密码:是),java,mysql,Java,Mysql,我尝试连接到Mac上的MySQL数据库。这个MySQL是用MAMP安装的。使用phpMyAdmin和CLI时,我可以连接到数据库。但当我尝试使用Java连接时,出现了以下错误: java.sql.SQLException: Access denied for user 'admin'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)

我尝试连接到Mac上的MySQL数据库。这个MySQL是用MAMP安装的。使用phpMyAdmin和CLI时,我可以连接到数据库。但当我尝试使用Java连接时,出现了以下错误:

java.sql.SQLException: Access denied for user 'admin'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:926)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4732)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1340)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at Hello.main(Hello.java:11)
我已经检查了配置。我确信这些问题:

  • 用户名和密码是正确的,因为它们在使用CLI时是正确的

  • 使用SQL语句授予所有权限:“使用GRANT选项将.上的所有权限授予'admin'@'localhost',由'cosmo'标识

  • 我怎样才能解决这个问题


    它可能与版本有关吗?我的MySQL版本是5.5.25。连接器版本是5.1.30

    我看不出这段代码有任何错误。一般语法是

    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = null;
    conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
    conn.close();
    
    我可以看到,您已经在注释字符串中尝试了这种组合,但尝试用ip替换localhost可能会奏效。您可以使用ipconfig命令通过命令提示符获取机器ip

    Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/xinandasai","admin","cosmo");
    
    在此之前,您必须授予对所有ip的访问权限,如

    GRANT ALL PRIVILEGES ON db.* TO db_user @'%' IDENTIFIED BY 'db_passwd';
    

    %是ip地址的通配符。无论如何,它与连接器版本无关。我在5.1.30和5.1.13版本中尝试了相同的代码,并且两个版本都有效。 我还尝试了两种重载方法:

    c = DriverManager.getConnection(URL+DBNAME, LOGIN, PASSWORD);
    

    这两个版本都适用


    尝试确保您有权访问所有ip地址。

    @JqueryLearner不幸的是,此方法也失败了。我安装了完整版本的MySQL社区版,并在端口3307上运行它(与MySQL的端口3306不同)。我用同样的程序成功地连接到了新的MySQL。因此,我认为这个问题来自MAMP的一些限制。我尝试过“将.上的所有权限授予由'cosmo'标识的'admin'@'”;并连接到地址127.0.0.1。但还是没用,真奇怪。尝试重置密码。按照这个链接,我正在使用MAMP(Apache+MySQL+PHP for Mac)而不是MySQL for Linux。所以我在GUI中更改了密码。但仍然没有用。我已尝试“将.上的所有权限授予由“cosmo”标识的“admin”@“;”并连接到地址127.0.0.1。但还是没用。你的java应用程序和数据库在同一台机器上运行吗?是的,都在我的个人Mac上运行
    c = DriverManager.getConnection(URL+DBNAME, LOGIN, PASSWORD);
    
    c = DriverManager.getConnection("jdbc:mysql://localhost/universite?" + "user=root&password=root");