Первичный ключ из вставленной строки jdbc?
Есть ли способ перекрестной базы данных для получения первичного ключа записи, которую вы только что вставили?
Я отметил, что этот ответ говорит, что вы можете получить его, вызвав SELECT LAST_INSERT_ID()
, и я думаю, что вы можете позвонить SELECT @@IDENTITY AS 'Identity';
, есть ли общий способ сделать это через базы данных в jdbc?
Если бы вы не предложили мне реализовать это для части кода, который мог бы получить доступ к любым SQL Server, MySQL и Oracle?
Ответы
Ответ 1
Скопировано из моего кода:
pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);
где pInsertOid - это подготовленный оператор.
вы можете получить ключ:
// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
int newId = rs.getInt(1);
oid.setId(newId);
}
Надеюсь, это даст вам хорошую отправную точку.
Ответ 2
extraneon answer, хотя правильный, не работает для Oracle.
Как вы это делаете для Oracle:
String key[] = {"ID"}; //put the name of the primary key column
ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
if (rs.next()) {
generatedKey = rs.getLong(1);
}
Ответ 3
Вы пробовали Statement.executeUpdate() и Statement.getGeneratedKeys() методы? Существует статья статья developerWorks, в которой упоминается этот подход.
Кроме того, в JDBC 4.0 Sun добавлена функция row_id, которая позволяет вам получить уникальный дескриптор в строке. Эта функция поддерживается Oracle и DB2. Для сервера sql вам, вероятно, понадобится сторонний драйвер, например этот.
Удачи!
Ответ 4
для oracle, Hibernate использует NEXT_VALUE из последовательности, если вы отобразили последовательность для генерации значения PKEY.
Не уверен, что он делает для MySQL или сервера MS SQL
Ответ 5
Spring предоставляет некоторую полезную поддержку эта операция, и справочное руководство, похоже, отвечает на ваш вопрос:
Нет стандартного единственного способа создать подходящую PreparedStatement (что объясняет, почему подпись метода - это способ является). Пример, который работает в Oracle и может не работать на других платформах является...
Я тестировал этот пример в MySQL и там тоже работает, но я не могу говорить на других платформах.
Ответ 6
Для баз данных, соответствующих SQL-99, вы можете использовать столбцы идентификаторов:
CREATE TABLE sometable (id INTEGER GENERATED ВСЕГДА КАК ИДЕНТИФИКАЦИЯ (НАЧАТЬ С 101) ПЕРВИЧНЫЙ КЛЮЧ,...
Используйте getGeneratedKeys() для извлечения ключа, который был только что вставлен с помощью executeUpdate (String sql, int autoGeneratedKeys). Используйте Statement.RETURN_GENERATED_KEYS для второго параметра для выполненияUpdate()
Ответ 7
Просто объявите столбец id как целое число id, а не первичный ключ NULL auto_increment
после этого выполните этот код
ResultSet ds=st.executeQuery("select * from user");
while(ds.next())
{
ds.last();
System.out.println("please note down your registration id which is "+ds.getInt("id"));
}
ds.close();
приведенный выше код покажет вам текущий идентификатор строки
если вы удалите ds.last()
, чем отобразите все значения столбца id