Подтвердить что ты не робот

Первичный ключ из вставленной строки jdbc?

Есть ли способ перекрестной базы данных для получения первичного ключа записи, которую вы только что вставили?

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

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

4b9b3361

Ответ 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