如何使用 SimpleJdbcInsert 和 executeBatch 和 MYSQL JDBC 驱动程序获取生成的密钥?
Posted
技术标签:
【中文标题】如何使用 SimpleJdbcInsert 和 executeBatch 和 MYSQL JDBC 驱动程序获取生成的密钥?【英文标题】:How to get generated keys using SimpleJdbcInsert and executeBatch with MYSQL JDBC driver? 【发布时间】:2015-04-02 08:07:03 【问题描述】:我想一次插入多条记录并获取每条记录的 id,它是自动递增的。我正在按照以下方式进行操作,但获取更新的行数而不是生成的密钥,在这种情况下为 id。
public int[] addPersons(List<Person> persons)
SqlParameterSource[] records= new BeanPropertySqlParameterSource[persons.size()] ;
int i = 0;
for (Person person: persons)
records[i]= new BeanPropertySqlParameterSource(person);
i++;
SimpleJdbcInsert insertPerson=new SimpleJdbcInsert(dsource).withTableName("PersonTable").usingGeneratedKeyColumns("id");
int [] ids= insertPerson.executeBatch(records);
return ids;
这里 Person 是 bean。 那么,对于添加的记录,如何获取自动生成的密钥 id 呢?
【问题讨论】:
【参考方案1】:Spring JDBC 不允许在调用 executeBatch
方法时检索生成的密钥。这是因为它在内部调用了java.sql.PreparedStatement
的executeBatch()
方法,该方法只返回受影响的行数。另一种方法是使用executeAndReturnKey
方法多次执行insert
语句。
【讨论】:
现在我只使用executeAndReturnKey,但我认为这样做不是最佳做法,因为它会不必要地增加事务数量并保持服务器繁忙。 是的,我同意你的观点,但我们对 API 有限制:(以上是关于如何使用 SimpleJdbcInsert 和 executeBatch 和 MYSQL JDBC 驱动程序获取生成的密钥?的主要内容,如果未能解决你的问题,请参考以下文章
SimpleJdbcInsert - 不在默认模式的表中插入数据
SimpleJdbcInsert由于自动生成的ID(HSQLDB)为空而无法插入
spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理(