JdbcTemplate执行更新操作(INSERT/UPDATE/DELETE)主要通过update()方法,它返回一个整数表示影响的行数。
例如:
int rows = jdbcTemplate.update("UPDATE table_name SET name=? WHERE id=?", "Mike", 10);
此外,JdbcTemplate还提供了一些插入操作的重载方法,可以返回自动生成的键值:
- update(PreparedStatementCreator psc) :
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement("INSERT INTO table_name ...", Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
Number key = keyHolder.getKey();
- update(final String sql, final PreparedStatementSetter pss) :
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
"INSERT INTO table_name (name) VALUES (?)",
new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, "John");
}
},
keyHolder
);
Number key = keyHolder.getKey();
- update(final String sql, Object… args) :
final String sql = "INSERT INTO table_name (name) VALUES (?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(sql, "John", keyHolder);
Number key = keyHolder.getKey();
所以,在执行插入操作时,JdbcTemplate可以通过以下几种方式返回自动生成的键值:
- 实现PreparedStatementCreator接口,在createPreparedStatement方法中指定RETURN_GENERATED_KEYS,然后从KeyHolder中获取键值。
- 实现PreparedStatementSetter接口设置值,同时传入KeyHolder作为额外参数以获取键值。
- 直接传递SQL语句与参数数组,以及KeyHolder来获取自动生成的键值。
在更新操作时,要注意update()方法返回的行数,以判断操作是否成功执行。在插入操作时,通过KeyHolder可以获取自动生成的键值。