【问题标题】:JDBC Access denied for user 'root'@'localhost'用户 'root'@'localhost' 的 JDBC 访问被拒绝
【发布时间】:2017-03-14 06:31:48
【问题描述】:

这对我来说是个错误。 我使用了正确的密码,因为这是我在启动 MySQL 时输入的。

DefaultTableModel dtm=(DefaultTableModel) jTable1.getModel();
dtm.setRowCount(0);
try{
    Class.forName("java.sql.Driver");
    Connection c=DriverManager.getConnection("jdbc:mysql://localhost/shashvat","root","1234");
    Statement s=c.createStatement();       
    ResultSet r=s.executeQuery("select * from phasetests;");

    while(r.next()){
        Object arr[]={r.getString(1),r.getString(2),r.getString(3),r.getString(4)};
        dtm.addRow(arr);
    }
}catch(Exception e){
System.out.println(e.getMessage());   
}

异常消息:

Access denied for user 'root'@'localhost' (using password: YES)

我也试过这个: https://stackoverflow.com/a/17908407/5036731

问题仍然存在。 请帮忙。

【问题讨论】:

  • 连接字符串中没有指定端口号
  • @Assen 不需要指定端口号,它将使用默认端口号。
  • 您需要更改此Class.forName("java.sql.Driver"); 它没有首先找到驱动程序
  • 我在其他地方使用过相同的代码,它可以工作。如果未找到驱动程序,则会给出未找到驱动程序的异常。反正我试过改了,还是不行。
  • @ShashvatJayakrishnan,你的 MySQL 服务正在运行吗?

标签: java mysql jdbc netbeans connectivity


【解决方案1】:

编辑:你的代码应该是这样的。

DefaultTableModel dtm=(DefaultTableModel) jTable1.getModel();
dtm.setRowCount(0);
try{ 
    //Class.forName("java.sql.Driver"); This is wrong
    Class.forName("com.mysql.jdbc.Driver"); // Declare it like this..
    Connection c=DriverManager.getConnection("jdbc:mysql://localhost:3306/shashvat","root","1234"); // port number was missing
    Statement s=c.createStatement();       
    ResultSet r=s.executeQuery("select * from phasetests;");

    while(r.next()){
        Object arr[]={r.getString(1),r.getString(2),r.getString(3),r.getString(4)};
        dtm.addRow(arr);
    } 
}catch(Exception e){
System.out.println(e.getMessage());   
} 

请参阅我在此处提到的代码正在运行。我在当地查了一下。问题应该出在 passwordschema access 上,您可以参考以下内容。

Access Denied for User 'root'@'localhost' (using password: YES) - No Privileges?

如果是权限问题。通过执行以下命令将所有权限授予root。

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

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

【讨论】:

  • 端口号不是必需的,自 JDBC 4.0 (Java 6) 起就不再需要使用 Class.forName
  • 我已经进行了必要的更改,但它仍然给出相同的异常。此外,我发布的代码在其他计算机上有效,但在我的计算机上无效。
  • @ShashvatJayakrishnan- 你是否可以使用工作台或其他数据库 IDE 工具使用用户名 'root' 和密码 '1234' 连接 mysql ?
  • 我在这个站点上看到了其他问题,并且已经授予权限,但仍然不起作用。我不知道问题是什么。
  • 我会再试一次的。
【解决方案2】:

请使用下面提到的语法

   Connection c =DriverManager.getConnection("jdbc:mysql"+"://"+host+":"+port+"/"+db,"root","pass");

【讨论】:

    【解决方案3】:

    只需将您的驱动程序名称更正为 com.mysql.jdbc.Driver 并使用端口 localhost:3306 添加主机

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2023-03-20
      • 2017-10-04
      • 2020-09-12
      • 2013-08-22
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多