Вопрос

Существует ли межплатформенный способ получить первичный ключ только что вставленной записи?

Я заметил, что этот ответ говорит, что вы можете получить его, позвонив SELECT LAST_INSERT_ID() и я думаю, что ты можешь позвонить SELECT @@IDENTITY AS 'Identity'; есть ли общий способ сделать это в базах данных в jdbc?

Если нет, то как бы вы предложили мне реализовать это для фрагмента кода, который мог бы получить доступ к любому из SQL Server, MySQL и Oracle?

Это было полезно?

Решение

Скопировано из моего кода:

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);
}

Надеюсь, это послужит вам хорошей отправной точкой.

Другие советы

ответ extraneon, хотя и правильный, не работает для 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);
}

Вы пробовали Заявление.executeUpdate() и Statement.getGeneratedKeys() методы?Eсть Статья на DeveloperWorks там упоминается подход.

Кроме того, в JDBC 4.0 Sun добавила функция row_id это позволяет вам получить уникальный дескриптор строки.Эта функция поддерживается Oracle и DB2.Для сервера sql вам, вероятно, понадобится сторонний драйвер, например Вот этот.

Удачи!

для oracle Hibernate использует NEXT_VALUE из последовательности, если вы сопоставили последовательность для генерации значения PKEY.

Не уверен, что он делает для сервера MySQL или MS SQL.

Spring предоставляет некоторую полезную поддержку для эта операция и справочное руководство, кажется, отвечает на ваш вопрос:

Не существует стандартного единственного способа создания подходящего подготовленного предприятия (что объясняет, почему подпись метода является таким, каким он есть).Примером, который работает на Oracle и может не работать на других платформах, является ...

Я протестировал этот пример на MySQL, и там он тоже работает, но о других платформах говорить не могу.

Для баз данных, соответствующих SQL-99, вы можете использовать столбцы идентификаторов:CREATE TABLE sometable (id INTEGER GENERATED ALWAYS AS IDENTITY (НАЧИНАЕТСЯ С 101) ПЕРВИЧНЫЙ КЛЮЧ, ...

Использовать getGeneratedKeys() чтобы получить ключ, который был только что вставлен с помощью ExecuteUpdate (String sql, int autoGeneratedKeys).Используйте Statement.RETURN_GENERATED_KEYS для второго параметра для выполненияUpdate()

Просто объявите столбец идентификатора как целое число идентификатора, а не 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top