java. sql .SQLSyntaxErrorException: неизвестная база данных 'userinfo' - PullRequest
0 голосов
/ 07 марта 2020

У меня явно есть база данных с именем userinfo с таблицей с именем userName. Я использую XAMPP

public class DatabaseHelper {
    private static final String dbName = "userinfo";
    Connection connection;
    Statement stmt = null;
    Timestamp date;

public  Connection getConnection(){

        String dbName = "userinfo";
    String userName="root";
    String password="12345678";

    try {
        Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            connection= DriverManager.getConnection("jdbc:mysql://localhost/"+dbName,userName,password);


    } catch (Exception e) {
        e.printStackTrace();
     System.err.println(e.getClass().getName() + ": " + e.getMessage());
        System.exit(0);
    }
    createUsersTable();
    return connection;

}

public void createUsersTable() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost/"+dbName);
            stmt = connection.createStatement();
            String sql = "CREATE TABLE IF NOT EXISTS Users"
                    + "(Id          INTEGER      PRIMARY KEY        AUTOINCREMENT,"
                    + " Firstname   TEXT                    NOT NULL,"
                    + " Lastname        TEXT                    NOT NULL,"
                    + " Username        TEXT                    NOT NULL,"
                    + " Password        TEXT                    NOT NULL,"
                    + " TotalAmount DOUBLE                  NOT NULL,"
                    + " StockAmount DOUBLE                  NOT NULL,"
                    + " Email       TEXT                    NOT NULL" + ");";
            stmt.executeUpdate(sql);
            stmt.close();
            connection.close();
        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
            System.exit(0);
        }
        System.out.println("User table creation successful");
    }

Ошибка, которую я получаю: ПРЕДУПРЕЖДЕНИЕ: загрузка документа F XML с API JavaFX версии 8.0.171 в среде выполнения JavaFX версии 8.0.131 java. sql .SQLSyntaxErrorException: неизвестная база данных 'userinfo'

откат: это ошибка, которую я получаю сейчас 7 марта 2020 г., 14:58:56 javafx.f xml .FXMLLoader $ ValueElement processValue ПРЕДУПРЕЖДЕНИЕ: загрузка F XML документ с API JavaFX версии 8.0.171 от среды выполнения JavaFX версии 8.0.131 java. sql .SQLException: доступ запрещен для пользователя '' @ 'localhost' (с использованием пароля: НЕТ)

1 Ответ

0 голосов
/ 07 марта 2020

Этот вопрос не завершен, поэтому мы не можем дать вам окончательный ответ. Я прокомментировал, чтобы указать на дополнительную информацию, которую вы должны предоставить .... если вы хотите получить полный ответ / решение.

Вот несколько первоначальных проблем, которые вам нужно исправить.

  1. Эти утверждения не нужны и должны быть удалены:

    Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
    Class.forName("com.mysql.cj.jdbc.Driver");
    

    Это не было необходимо с тех пор, как были выпущены драйверы, совместимые с Java 6 и JDB C 4.0 для MySQL. Примерно 2007! Вы только должны использовать DriverManager.getConnection.

    Почему это важно? Ну, имя класса драйвера зависит от базы данных и драйвера версия зависит. Если вы ввели код класса драйвера в свой код, он может сломаться 1 . (Кроме того, ненужный вызов Class.forName неэффективен.)

  2. Ваш код не использует имя учетной записи и пароль. Вы будете подключаться к базе данных без имени учетной записи и пароля. В зависимости от того, как настроен контроль доступа MySQL, этот может заставить его сказать, что конкретная база данных не существует. (Возможно ... хотя я сомневаюсь в этом.)

  3. Ваш код неправильно управляет соединением:

    • Ваш getConnection вызывает DriverManager.getConnection и назначает результат для connection.
    • Затем он вызывает createUserTable ..., который снова вызывает DriverManager.getConnection и присваивает его той же переменной connection.
    • Затем createUserTable выполняет некоторые SQL и закрывает connection.
    • В результате ваш getConnection в конечном итоге вернет Connection, который был закрыт.

    createUserTable не должен вызывать DriverManager.getConnection, и он не должен закрываться connection.

  4. Вызов System.exit глубоко в вашем коде - это вообще плохая идея. Лучше разрешить распространению исключения, чтобы что-то еще могло с ним справиться.


1 - Это не теоретическая проблема. Имя класса драйвера сделал изменилось между MySQL Разъем / J 5.x и MySQL Разъем / J 8.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...