Я хочу INSERT создать запись в базе данных (в моем случае Microsoft SQL Server), используя JDBC в Java. В то же время я хочу получить идентификатор вставки. Как я могу добиться этого с помощью JDBC API?
Переведено автоматически
Ответ 1
Если это автоматически сгенерированный ключ, то вы можете использовать Statement#getGeneratedKeys() для этого. Вам нужно вызвать его тем же Statement способом, который используется для INSERT. Сначала вам нужно создать инструкцию, используя Statement.RETURN_GENERATED_KEYS для уведомления драйвера JDBC о возврате ключей.
if (affectedRows == 0) { thrownewSQLException("Creating user failed, no rows affected."); }
try (ResultSetgeneratedKeys= statement.getGeneratedKeys()) { if (generatedKeys.next()) { user.setId(generatedKeys.getLong(1)); } else { thrownewSQLException("Creating user failed, no ID obtained."); } } } }
Обратите внимание, что вы зависите от драйвера JDBC в том, работает ли он. В настоящее время большинство последних версий будут работать, но, если я прав, Oracle JDBC driver по-прежнему испытывает некоторые проблемы с этим. MySQL и DB2 уже давно поддерживают его. PostgreSQL начал поддерживать его не так давно. Я не могу прокомментировать MSSQL, поскольку я никогда им не пользовался.
Для Oracle вы можете вызвать предложение a CallableStatement with a RETURNING или a SELECT CURRVAL(sequencename) (или любой другой специфичный для БД синтаксис для этого) непосредственно после INSERT в той же транзакции, чтобы получить последний сгенерированный ключ. Смотрите также этот ответ.
Ответ 2
Создать сгенерированный столбец
String generatedColumns[] = { "ID" };
Передайте этот генетизированный столбец в свой оператор
Где BATCHID - автоматически сгенерированный идентификатор.
Ответ 4
Я запускаю Microsoft SQL Server 2008 R2 из однопоточного приложения на основе JDBC и извлекаю последний идентификатор без использования свойства RETURN_GENERATED_KEYS или какого-либо PreparedStatement . Выглядит примерно так: