В работе с базами данных часто возникает ситуация, когда после вставки новой записи в таблицу требуется получить её идентификатор. Это может быть полезно, например, для ссылки на только что созданную запись из другой таблицы или для выполнения дальнейших операций с этой записью. В примере ниже рассматривается вставка записи в таблицу Users
базы данных Microsoft SQL Server:
String query = "INSERT INTO Users (name, email) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, "John Doe"); statement.setString(2, "johndoe@example.com"); int affectedRows = statement.executeUpdate();
В этом случае, после выполнения запроса, можно получить количество затронутых записей, но не идентификатор вставленной записи.
Получение ID вставленной записи
Для решения этой задачи в JDBC предусмотрен специальный метод prepareStatement
, который принимает дополнительный параметр – флаг, указывающий, что требуется вернуть сгенерированные ключи.
String query = "INSERT INTO Users (name, email) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); statement.setString(1, "John Doe"); statement.setString(2, "johndoe@example.com"); int affectedRows = statement.executeUpdate(); if (affectedRows > 0) { try (ResultSet generatedKeys = statement.getGeneratedKeys()) { if (generatedKeys.next()) { long id = generatedKeys.getLong(1); System.out.println("Inserted record's ID: " + id); } } }
В этом примере после вставки записи вызывается метод getGeneratedKeys()
, который возвращает ResultSet
с сгенерированными ключами. Затем из этого ResultSet
можно извлечь идентификатор вставленной записи.
Заключение
Таким образом, JDBC предоставляет удобные инструменты для работы с базами данных, включая получение идентификаторов вставленных записей. Это позволяет эффективно решать задачи, связанные с обработкой данных и управлением связями между таблицами.
Добавить комментарий