данные не вставляются в мою таблицу SQL, но они также говорят, что есть дубликаты первичных ключей - PullRequest
0 голосов
/ 22 марта 2019

Итак, я просто пытаюсь, чтобы данные о зарегистрированных пользователях отображались в таблице SQL. Я знаю, что успешно подключился к базе данных, но никакие данные не добавляются. Я не уверен, почему это так. Когда я запускаю код, я получаю SQLException о повторяющейся записи 'username' для первичного ключа. вот код

public void createUser() throws SQLException{

    String query = " INSERT INTO users(username, password, name, email)"
            + " VALUES(?, ?, ?, ?)";
    PreparedStatement statement = db.getConn().prepareStatement(query);
    statement.setString(1, String.valueOf(username));
    statement.setString(2, String.valueOf(password));
    statement.setString(3, String.valueOf(name));
    statement.setString(4, String.valueOf(email));

        statement.executeUpdate();
      //  error is here
        statement.close();
        db.getConn().commit();
        System.out.println("success");

}

Я могу распечатать все имя пользователя / пароль / имя / адрес электронной почты без проблем. Ошибка выдается в строке statement.executeUpdate().

вот база данных, которая создается.

CREATE TABLE `users` (
`username` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL, 
`name` VARCHAR(45) NOT NULL,
`email` VARCHAR(45) NOT NULL,
PRIMARY KEY(`username`))
COMMENT = "this is a test table";

Я могу вставить данные в MySQLWorkbench без проблем, и я могу сделать DESCRIBE users и посмотреть таблицу с пользователями, созданными вручную в рабочей среде, но я не уверен, почему метод java не работает. спасибо за ваше время!

edit: изменено с statement.setString(1, "username"); на statement.setString(1, String.valueOf(username)); и так далее. но теперь я получаю ошибку усечения данных. Data truncation: Data too long for column 'username' at row 1

Ответы [ 4 ]

2 голосов
/ 22 марта 2019

Ваша ошибка в том, что вы вставляете фиксированные значения в оператор, а не в свои предполагаемые значения.

statement.setString(1, "username");
    statement.setString(2, "password");
    statement.setString(3, "name");
    statement.setString(4, "email");

Вы не должны заключать в кавычки имена переменных. E, г:

statement.setString(1, username);
    statement.setString(2, password);
    statement.setString(3, name);
    statement.setString(4, email);
1 голос
/ 22 марта 2019

Вы можете попробовать несколько вещей для дальнейшей отладки.

1) Попробуйте передать строковые значения в метод Statement.setString (), чтобы подтвердить, что ваш вызов БД выполнен.

public void createUser () выдает SQLException {

String query = " INSERT INTO users(username, password, name, email)"
        + " VALUES(?, ?, ?, ?)";
PreparedStatement statement = db.getConn().prepareStatement(query);
statement.setString(1, "Test");
statement.setString(2, "Test");
statement.setString(3, "name");
statement.setString(4, "abc@abc.com");

    statement.executeUpdate();
  //  error is here
    statement.close();
    db.getConn().commit();
    System.out.println("success");

}

2) Попробуйте напечатать значения для имени пользователя, прежде чем вызывать Statement.setString (), и проверьте

3) Проверьте существующие данные в таблице, возможно, вы пытаетесь ввести дубликат записи. имя пользователя является первичным ключом для вашей таблицы.

1 голос
/ 22 марта 2019

Это потому, что имя пользователя - ваш первичный ключ, и вы пытаетесь вставить повторяющиеся записи в таблицу для столбца имени пользователя. Проверьте, есть ли имя пользователя, которого вы хотите вставить, в таблице.

1 голос
/ 22 марта 2019

проверить таблицу user, если есть username значение '1', отбросить его и повторить попытку.

...