Как я могу получить значения автоматического увеличения в запросе на пакетное обновление (Java, MySQL)?

Я использую шаблон Spring-Jdbc (первый таймер) для создания репозитория MySql. У меня есть таблицы, которые используют столбцы AutoIncrement в качестве первичного ключа.

Интересно, есть ли способ получить вновь сгенерированные идентификаторы (autoInc) с каждым успешным оператором пакетного создания?

Любые указатели или образцы были бы большим подспорьем.

Спасибо, Панкс.


person Panks    schedule 06.06.2012    source источник
comment
возможный дубликат Как получить идентификатор вставки в JDBC?   -  person eggyal    schedule 06.06.2012


Ответы (1)


Используйте метод getGeneratedKeys(). из вашего объекта Statement или PreparedStatement, чтобы идентифицировать новые автоматически сгенерированные значения. Повторите возвращенный объект ResultSet, чтобы получить вновь сгенерированные ключевые значения в порядке пакетных операторов.

Этот вызов может вызвать java.sql.SQLFeatureNotSupportedException, если драйвер JDBC , который вы используете, не поддерживает этот метод.

Пример фрагмента кода:

String sql_insert =  
    "insert into my_table ( non_auto_incrmnt_fld_names_,_separated ) " +  
                 " values ( record1 ), ( record2 )"; // append as many as required  
...  
int rowsAffected = stmtObject.executeUpdate( sql_insert, Statement.RETURN_GENERATED_KEYS );  
ResultSet rs = stmtObject.getGeneratedKeys();  

//******************************************************  
rs.last();  
int rows = rs.getRow();  
System.out.println( "Generated keys count: " + rows );  
int currentRow = 1;  
rs.beforeFirst();  
//******************************************************/  

while( rs.next() ) {  
    System.out.println( /**/( currentRow++ ) + " = " + /**/rs.getInt( 1 ) );  
} // while rs  
person Ravinder Reddy    schedule 06.06.2012
comment
Спасибо, Равиндер, это решение идет с необработанным jdbc. Я работаю с весенними jdbctemplates. Я нашел для него одно решение, используя spring jdbc- [ссылка] stackoverflow.com/questions/1665846/ Но я ищу решение для пакетного обновления. - person Panks; 07.06.2012