Доступ запрещен для пользователя '' @ 'localhost' (используя пароль: НЕТ) в Eclipse вместо 'root' @ 'localhost' - PullRequest
0 голосов
/ 24 января 2020

Я делаю проект java с SceneBuilder и Eclipse; Мне нужно подключиться к локальной базе данных, созданной с использованием MySQL, но после запуска моего кода Java в eclipse я получаю следующую ошибку:

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 workbench и командную строку, я могу правильно получить доступ с помощью "root" / "root" и запускать запросы на моей базе данных. Запуск того же Eclipseproject на другом ноутбуке или в моем доме p c, я могу запустить его без ошибок. Так что проблема не в коде, а в некоторых настройках моего текущего ноутбука.

Я уже пытался:

  • Удалить и переустановить Eclipse.
  • Удалить и переустановите mySQL продукты: Workbench, Server, J Connector.
  • Переключите рабочее пространство Eclipse.
  • Откройте порт 3306 из windows брандмауэра.

Это часть кода, где я пытаюсь подключиться к моей БД.

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;
    }
}

1 Ответ

0 голосов
/ 25 января 2020

Решение

Проблема была не в MySQL учетных данных для входа, а в конфигурации Eclipse.

В моем проекте папки .classpath и .project файлы были повреждены. Infact собирается myproject>right click>Run As..>Run Configurations основной класс был установлен как com.mysql.cj.jdbc.admin.TimezoneDump.main вместо моего mainApp класса. Попытка изменить там основной файл класса не сработала, потому что для Eclipse mainApp не существует.

Так вот, что я сделал, чтобы устранить ошибку:

  1. Удалить проект из Eclipse (не на диске)
  2. Закрыть Eclipse
  3. Go в папке проекта и удалить .classpath и .project файлы
  4. Откройте eclipse, от go до File > Open projects from File System и выберите каталог проекта
  5. Щелкните правой кнопкой мыши по проекту> Run As> Run Configurations и установите правильный главный класс
...