java.sql.sqlexception:拒绝用户“root”@“localhost”的访问(使用密码:yes)

nwlqm0z1  于 2021-06-27  发布在  Java
关注(0)|答案(24)|浏览(626)

以下代码:

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

n6lpvg4x16#

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

juzqafwq

juzqafwq17#

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

jdbc:mysql://localhost:3306/mydb
luaexgnf

luaexgnf18#

使用正确的jar(具有正确的版本)
授予根用户独立于主机的访问权限或创建用户

pzfprimi

pzfprimi19#

如果您使用的是mysql工作台,请转到工作台的主页,右键单击您的数据库,复制jdbc连接字符串,并将其粘贴到java程序中。

du7egjpx

du7egjpx20#

我的 application.properties 看起来像这样

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb

spring.datasource.username=root

spring.datasource.password=root

对我来说唯一有效的方法就是maven清理,然后maven安装。

ki0zmccv

ki0zmccv21#

在从头开始创建数据库时,可以使用:

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

这里有一个相同的场景。

idfiyjo8

idfiyjo822#

我也有这个问题,这个解决了。
更改: Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=password"; 设置: "serverTimezone=UTC""Unified standard world time" . "useUnicode=true&characterEncoding=UTF-8""Solve Chinese garbled" .
虽然我的数据库没有任何中文单词。但它正在发挥作用。引用自https://www.cnblogs.com/easonjim/p/6906713.html

roqulrg3

roqulrg323#

如果您使用java从本地计算机连接远程mysql服务器,请参阅以下步骤。错误:“java.sql.sqlexception:拒绝用户'xx'@'101.123.163.141'的访问(使用密码:yes)”
对于远程访问,可以是cpanel或其他人为您的本地ip地址授予远程访问权限。
在上面的错误消息中:“101.123.163.141”是我的本地机器ip。所以首先我们必须在cpanel->remotemysql中提供远程访问®. 然后运行应用程序进行连接。

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();

希望它能解决你的问题。
谢谢

mqkwyuun

mqkwyuun24#

我也面临同样的问题,我的连接字符串是有效的,用户名和密码也是有效的,甚至用户有足够的权限访问数据库。
我通过删除mysql创建的临时文件夹解决了这个问题(请在删除任何文件夹之前进行备份,以防它不起作用,然后您可以再次放置这些文件)。
windows中mysql的临时文件和连接文件的默认文件夹位置为:
c:\programdata\mysql数据库
我已删除(备份)以下文件夹:
c:\programdata\mysql\mysql服务器\data\sys
注意:在删除任何项目之前,确保mysql服务没有启动,否则它将不允许删除任何文件
这对我很有用。

相关问题