【问题标题】:Access denied for user ''@'localhost' (using password: NO) in Eclipse, instead of 'root'@'localhost', classpath corrupted [duplicate]Eclipse 中用户“@'localhost'(使用密码:否)的访问被拒绝,而不是'root'@'localhost',类路径已损坏[重复]
【发布时间】:2020-05-10 22:57:09
【问题描述】:

我正在使用 SceneBuilder 和 Eclipse 制作一个 java 项目;我需要连接到使用 MySQL 创建的本地数据库,但是在 eclipse 中运行我的 Java 代码后,我收到以下错误:

Exception in thread "main" java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.mysql.cj.jdbc.admin.TimezoneDump.main(TimezoneDump.java:70)

而不是'root'@'localhost' (using password: NO) 是登录凭据错误,现在我有''@'localhost' (using password: NO)。 使用 MySQL 工作台和命令提示符,我可以使用“root”/“root”正确访问,并在我的数据库上启动查询。在另一台笔记本电脑或我的家用电脑上运行相同的 Eclipse 项目,我可以毫无错误地运行它。所以问题不在于代码,而在于我当前笔记本电脑的某些设置。

我已经尝试过:

  • 卸载并重新安装 Eclipse。
  • 卸载并重新安装 mySQL 产品:Workbench、Server、J 连接器。
  • 切换 Eclipse 工作区。
  • 从 windows 防火墙打开 3306 端口。

这是我尝试连接到我的数据库的代码部分。

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;



public class UserDAO {

    private static String USER = "root";
    private static String PASS = "root";
    private static String DB_URL = "jdbc:mysql://127.0.0.1:3306/beecological?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
    private static String DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";


    public static boolean checkUsername(String username) {
        Statement stmt = null;
        Connection conn = null;
        int res = 1;

        try {

            Class.forName(DRIVER_CLASS_NAME);

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

            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            res = Queries.verifyUsernameAvailable(stmt, username);

            stmt.close();
            conn.close();
        }catch (Exception e) {
            e.printStackTrace();
        }

        if(res == 1) {
            return false;
        }
        return true;
    }

    public static void saveUser(User instance) {
        Statement stmt = null;
        Connection conn = null;

        try {

            Class.forName(DRIVER_CLASS_NAME);

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

            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            Queries.insertUser(stmt, instance);

            stmt.close();
            conn.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static boolean verifyLogin(User instance) {
        Statement stmt = null;
        Connection conn = null;
        int res = 0;

        try {
            //caricamento driver mysql
            Class.forName(DRIVER_CLASS_NAME);

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

            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            res = Queries.verifyUserRegistered(stmt, instance);

            stmt.close();
            conn.close();
        }catch (Exception e) {
            e.printStackTrace();
        }

        if (res == 0) {
            return false;   //utente immesso non esiste
        }
        return true;
    }
}

【问题讨论】:

  • 也许,你的空用户是问题,看到错误消息...: Access denied for user ''@'localhost' (using password: NO),它有一个空的String作为用户名,不是吗?
  • 是的,这就是问题所在,但我不知道这怎么可能,因为使用工作台我使用 user: 'root' 和 psw: 'root' 正确访问数据库
  • 如果启用了using password: NO,则不必提供密码,但不建议使用没有密码的root。无论如何,用户名以某种方式被清空很奇怪......您可以尝试不使用密码,但我怀疑它会改变这种行为。
  • using password: NO 这是一个错误,我使用 cmd 正确访问数据库,使用 root/root 访问工作台。如果我从代码中完全删除DriverManager.getConnection(),我也会收到错误消息。

标签: java mysql sql eclipse


【解决方案1】:

解决方案

问题不在于 MySQL 登录凭据,而在于 Eclipse 配置。

在我的文件夹项目中,.classpath.project 文件已损坏。事实上去myproject&gt;right click&gt;Run As..&gt;Run Configurations 的主类被设置为com.mysql.cj.jdbc.admin.TimezoneDump.main 而不是我的mainApp 类。尝试更改主类文件不起作用,因为对于 Eclipse,mainApp 不存在。

这就是我为解决错误所做的工作:

  1. 从 Eclipse 中删除项目(不在磁盘上)
  2. 关闭 Eclipse
  3. 进入项目文件夹并删除.classpath.project文件
  4. 打开eclipse,进入File &gt; Open projects from File System,选择项目目录
  5. 在项目上右击> Run As > Run Configurations 并设置正确的Main类

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 2013-12-29
    • 2016-12-27
    • 2012-06-17
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多