Java 如何使用SimpleJDCnsert和带有MYSQL JDBC驱动程序的executeBatch获取生成的密钥?
我想一次插入多个记录,并获取每个记录的id,该id是自动递增的。我按照下面的方式做,但得到的是更新行的数量,而不是生成的键,在本例中,该键是idJava 如何使用SimpleJDCnsert和带有MYSQL JDBC驱动程序的executeBatch获取生成的密钥?,java,mysql,spring,jdbc,spring-jdbc,Java,Mysql,Spring,Jdbc,Spring Jdbc,我想一次插入多个记录,并获取每个记录的id,该id是自动递增的。我按照下面的方式做,但得到的是更新行的数量,而不是生成的键,在本例中,该键是id public int[] addPersons(List<Person> persons) { SqlParameterSource[] records= new BeanPropertySqlParameterSource[persons.size()] ; int i = 0; for (Person perso
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;
}
public int[]addPersons(列出人员)
{
SqlParameterSource[]records=new BeanPropertySqlParameterSource[persons.size()];
int i=0;
用于(人:人)
{
记录[i]=新BeanPropertySqlParameterSource(个人);
i++;
}
SimpleJDBCInsertPerson=新的SimpleJDBCInsertPerson(数据源)。带有表名(“PersonTable”)。使用GeneratedKeyColumns(“id”);
int[]id=insertPerson.executeBatch(记录);
返回ID;
}
这里的人就是豆子。
那么,对于添加的记录,如何获取自动生成的密钥id呢?Spring JDBC不允许在调用
executeBatch
方法时检索生成的密钥。这是因为它在内部调用java.sql.PreparedStatement
的executeBatch()
方法,该方法只返回受影响的行数。另一种方法是使用executeAndReturnKey
方法多次执行insert
语句。现在我只使用executeAndReturnKey,但我认为这样做不是最好的做法,因为这样做将不必要地增加事务数量并使服务器繁忙。是的,我同意你的看法,但我们对API有一个限制:(