Generated Keys
Иногда часть новой строки создаёт сама база
При вставке записи приложение может не знать её будущий идентификатор.
Например, значение id генерируется последовательностью или identity-механизмом базы.
После INSERT этот ключ часто нужен сразу: чтобы вернуть его клиенту
или использовать в следующей связанной записи.
Просим JDBC вернуть сгенерированные значения
String sql = "INSERT INTO users(name) VALUES (?)";
try (PreparedStatement statement = connection.prepareStatement(
sql, Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, "Mila");
statement.executeUpdate();
try (ResultSet keys = statement.getGeneratedKeys()) {
if (keys.next()) {
long id = keys.getLong(1);
System.out.println(id);
}
}
}
Флаг Statement.RETURN_GENERATED_KEYS сообщает драйверу,
что после выполнения понадобятся созданные базой ключи.
Затем getGeneratedKeys() возвращает их как обычный ResultSet.
Конкретный результат зависит от базы и драйвера
JDBC задаёт API получения ключей, но механизм их генерации относится к конкретной СУБД. Поэтому не стоит предполагать, что любая команда и любой драйвер вернут одинаковый набор значений. Если приложению важны конкретные столбцы, учитывай возможности выбранной базы и драйвера.
Не ищи только что вставленную строку отдельным SELECT ради её id.
Если база и драйвер поддерживают generated keys, получение ключа через тот же INSERT обычно точнее и проще.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти