2013-02-20 5 views
0

Я пытаюсь сохранить строку в таблице базы данных DB2, где основным ключом является автоинкремент. Это отлично работает, но у меня возникли проблемы с тем, чтобы вернуть значение первичного ключа для дальнейшей обработки после успешной вставки строки. Как вы это достигаете? @JdbcInsert возвращает количество строк, которые были вставлены ...Получение значения автоинкремента при использовании @JdbcInsert

+0

Возможно, это может помочь http://www.openntf.org/internal/home.nsf/response.xsp?action=openDocument&documentId=84B68167F84911AF862579910036B4AD&MainID=40D5F2DFF8587C688625795A006F23C4 –

+0

Благодаря @FredrikNorling. Из того, что я могу прочитать из разговора, проблема заключалась в том, чтобы получить вставку для работы вообще. Сама вставка работает, она просто не возвращает сгенерированное значение ключа, вместо этого она возвращает количество вставленных строк. Всякий раз, когда этот новичок - период блокировки здесь (должен ждать 8 часов) закончился, я отправлю свой подход в качестве ответа, поскольку он слишком длинный для комментария ... –

+0

Что я мог прочитать, там был добавлен один дополнительный параметр , и это был столбец id, который должен быть возвращен. Но я не знаю, было ли это реализовано, нет документации о нем, как я нашел. –

ответ

1

Поскольку, похоже, для SSJS (по крайней мере, для меня) это не похоже, я переместил эту часть логики с моего контроллера SSJS для Java-помощника, который я создал для связанных с JDBC задач. A Statement способен передавать сгенерированные ключи (используя метод executeUpdate()). Поэтому я все еще создаю свое соединение через @JdbcGetConnection, но потом передаю его в bean-компонент. Это интересная часть боба:

/** 
* SQL contains the INSERT Statement 
*/  
public int executeUpdate(Connection conn, String SQL){ 

    int returnVal; 
    Statement stmt = conn.createStatement(); 

    stmt.executeUpdate(SQL, 
    Statement.RETURN_GENERATED_KEYS); 

    if(!conn.getAutoCommit()) conn.commit(); 

    ResultSet keys = stmt.getGeneratedKeys(); 

    if(keys.next()){ 
    returnVal = keys.getInt(1); 
    } else { 
    returnVal = -1; 
    } 

    return returnVal; 
} 

Если вставить несколько строк, в то время, вам необходимо изменить ключ обработки извлечения, конечно.

0

В новых версиях DB2 вы можете преобразовать каждую Insert в Select, чтобы получить автоматически сгенерированные ключевые столбцы. Примером может служить:

выберите keycol из финального стола (? Вставить в таблицу (col1, col2) значения (,))

keycol это имя вашей колонки идентичности

Выбрать можно выполнить с тем же @Function, что и ваши обычные запросы.

Смежные вопросы