Повторяющаяся запись для первичного ключа - регистрационная форма - PullRequest
0 голосов
/ 02 августа 2020

У меня есть одна простая форма регистрации с jsp, сервлетом и mysql. Но я могу зарегистрировать только одного пользователя, тогда я получил эту ошибку:

Severe: Message: Duplicate entry '1' for key 'PRIMARY'. Конечно, когда я удаляю этого пользователя из базы данных, я могу создать снова, но только одного пользователя. Кроме того, я добавляю автоматическое приращение в этот столбец:

CREATE TABLE user (id int(3) NOT NULL AUTO_INCREMENT ...

Это также мой метод вставки в db:

public class UserDAO {

public int registerUser(User User) throws ClassNotFoundException, SQLException {
    String INSERT_USERS_SQL = "INSERT INTO user"
            + "  (id, firstName, lastName, username, password, email) VALUES "
            + " (?, ?, ?, ?, ?, ?)";

    int result = 0;

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

    try (Connection connection = DriverManager
            .getConnection("jdbc:mysql://localhost:3306/cs230projekat","root","");
            // Step 2:Create a statement using connection object
            PreparedStatement preparedStatement = connection.prepareStatement(INSERT_USERS_SQL)) {
        preparedStatement.setInt(1, 1);
        preparedStatement.setString(2, User.getFirstName());
        preparedStatement.setString(3, User.getLastName());
        preparedStatement.setString(4, User.getUsername());
        preparedStatement.setString(5, User.getPassword());
        preparedStatement.setString(6, User.getEmail());

        System.out.println(preparedStatement);
        // Step 3: Execute the query or update query
        result = preparedStatement.executeUpdate();

    } catch (SQLException e) {
        // process sql exception
        printSQLException(e);
    }
    return result;
}

Спасибо.

Ответы [ 3 ]

4 голосов
/ 02 августа 2020

Вы всегда устанавливаете значение столбца id равным 1 с помощью preparedStatement.setInt(1, 1). Поскольку вы говорите, что у вас есть автоинкремент в столбце id, удалите id из SQL, удалите вышеупомянутую строку и настройте индексы столбцов (первые аргументы) для всех остальных вызовов методов setString().

1 голос
/ 02 августа 2020

При установленном автоматическом приращении вам не нужно указывать столбец 'id' в ваших sql операторах вставки.

Вот некоторая информация об автоматическом приращении с веб-сайта MySQL: https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

0 голосов
/ 02 августа 2020

Из вашего кода похоже, что вы всегда вставляете значение 1 для столбца id, попробуйте правильно реализовать autoGenerate. Для получения дополнительной помощи вы можете взглянуть на аналогичную реализацию

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