值java.sql.SQLException:访问被拒绝的用户“根” @“本地主机”(使用密码:是)

2019-06-17 17:34发布

下面的代码:

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)

Answer 1:

当你从头创建一个数据库,你可以使用:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();

这里有一个相同的场景 。



Answer 2:

这可以帮助你:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;

使用命令行或一些GUI工具执行。

不要忘记,以取代%password%与真正的密码。



Answer 3:

我有一个类似的问题,但differemce是:我没有执行从我JavaApp localhost ,而是来自远程PC。 所以,我有类似java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)为了解决这个问题,你可以简单地登录到phpMyAdmin,去Users ,请点击add user并输入要执行你的JavaApp主机(或选择Any Host



Answer 4:

您可以使用此

   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME";


   static final String USER = "root";
   static final String PASS = "YOUR_ROOT_PASSWORD"; 

  Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);

你必须给出正确的root密码。



Answer 5:

这是具体到Ubuntu 18.04 LTS和MySQL 5.x的跟着这个链接从这里开始按照一切:

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;

这解决了我的问题,现在我能够登录。



Answer 6:

您应指定要连接到数据库:

jdbc:mysql://localhost:3306/mydb


Answer 7:

我有同样的问题“值java.sql.SQLException:拒绝访问用户‘根’@‘localhost’的(使用密码:YES)”。 问题是“密码错误”。 复制并粘贴查询作为-IT-在shell来检查它是否即为所需的输出与否。 小错误会消耗更多的时间。



Answer 8:

我被击中了同样的问题。 新增MySQL的服务端口号(3307),解决了这个问题。

conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");


Answer 9:

尝试像这样....

public static Connection getConnection() throws SQLException{

    String driver = "com.mysql.jdbc.Driver";
    String url    = "jdbc:mysql://localhost:3306/test";
    String username = "root";
    String password = "vicky";            // Change it to your Password
    System.setProperty(driver,"");

    return DriverManager.getConnection(url,username,password);
}


Answer 10:

虽然这可能不是你的问题的原因,你会得到同样的错误,如果有在同一端口上运行两个MySQL服务。 您可以通过查看任务管理器中的服务选项卡上的服务列表检查窗口。



Answer 11:

此异常也引起由于MySQL数据库的版本不匹配和你的pom.xml /罐。

确保你的pom.xml /罐版本比你的MySQL数据库版本更高。 由于较高的版本与低版本的兼容,但相同的是不是真实的倒数。

解决方案是为Java项目

  • 替换适当版本的Jar。

解决方案基于Maven的

  • 改变依赖版本中的pom.xml

解决方案春季启动 - 通过增加5.1.5.Final覆盖春天启动的依赖



Answer 12:

我不得不改变我的SQL设置(在我的主机,Dreamhost的在我的情况),允许用户名从其他主机,不只是Dreamhost的,因为我从我的计算机上的IDE程序访问数据库。 我这样做,现在通过添加%至允许的主机列表。 现在的作品!



Answer 13:

这似乎主要是当MySQL用户名和密码是不正确的情况。 请检查您的MySQL用户名和密码。



Answer 14:

如果您从本地机器使用的连接远程MySQL服务器的Java看下面的步骤。 错误: “值java.sql.SQLException:拒绝访问用户xxxxx'@'101.123.163.141'(使用密码:YES)”

远程访问可能的cPanel或他人授予您的本地IP地址的远程访问。

在上面的错误信息:“101.123.163.141”是我的本地机器的IP。 所以首先我们必须给在Cpanel->远程MySQL®远程访问。 然后运行应用程序进行连接。

Class.forName("com.mysql.jdbc.Driver");  
Connection con=DriverManager.getConnection(  
    "jdbc:mysql://www.xyz.com/abc","def","ghi");  
//here abc is database name, def is username and ghi        
Statement stmt=con.createStatement();  
ResultSet rs=stmt.executeQuery("select * from employee");  
    while(rs.next())  
        System.out.println(rs.getInt(1)+" "+rs.getString(2)+"  
                          "+rs.getString(3));  
con.close();    

希望它能够解决您的问题。

谢谢



Answer 15:

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



文章来源: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)