Адресная книга JavaFX обновляет контакты с такой же информацией (SQL) - PullRequest
0 голосов
/ 04 марта 2020

Итак, я заканчиваю адресную книгу в JavaFX. Пользователь может добавлять, редактировать, удалять и просматривать все контакты, которые хранятся в базе данных. Однако у меня есть небольшая проблема, если несколько записей совместно используют одну часть информации, когда я редактирую что-то для одной из них, она обновляет ее для всего. Вот пример:

Допустим, в моей базе данных есть три человека (Джон, Чарли и еще один Джон)

И, скажем, все три человека имеют разные телефонные номера. Я хочу обновить первый номер телефона Джона. Когда я меняю его, он изменяет оба номера телефона Джона на новое введенное мной значение.

Эта проблема на 100% связана с тем, как я написал SQL для функции обновления. Вот что у меня сейчас.

  public void updateData(String column, String newValue, String id) throws SQLException {

    String updateQuery = "UPDATE contacts SET " + column + " = ? WHERE " + column + "= ? ";

    try {
      PreparedStatement psmt = DBConnect.getConnection().prepareStatement(updateQuery);
      psmt.setString(1, newValue);
      psmt.setString(2, id);
      psmt.executeUpdate();
    } catch (SQLException ex) {
      ex.printStackTrace();
    }
  }

UpdateData вызывается методами, поля которых я хочу изменить, вот так.

  public void changePhoneNumberCellEvent(CellEditEvent editedCell) throws SQLException {
    Person person = table_contact.getSelectionModel().getSelectedItem();
    String oldPhoneNumber = person.getPhone_number();
    person.setPhone_number(editedCell.getNewValue().toString());
    updateData("phone_number", editedCell.getNewValue().toString(), oldPhoneNumber);
  }

Теперь я знаю, что мой SQL ломается, потому что он находит несколько одинаковых значений в столбце first_name, например? Можно ли как-то отредактировать этот SQL, чтобы он изменил только информацию о человеке, которого я хочу изменить? Я провел некоторое исследование, и было поднято ключевое слово DISTINCT, но я не думаю, что это могло бы помочь, потому что 2 человека могут иметь одно и то же имя / фамилию и т. Д. c.

Спасибо.

1 Ответ

2 голосов
/ 04 марта 2020

Всегда используйте первичный ключ в качестве уникального идентификатора для набора данных. При обновлении, удалении вы должны всегда использовать этот уникальный идентификатор. В противном случае ваши запросы будут вызывать побочные эффекты. Например, удаление нескольких наборов данных с одинаковыми данными в столбце.

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