我正在使用Jdbctemplate,我需要插入查询的id。 我读到我必须构建一个特定的PreparedStatement并使用GeneratedKeyHolder对象。
问题是在我的应用程序中,所有insert方法都使用此JdbcTemplate更新方法:
getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
有没有其他方法可以在不重构所有daos的情况下获取插入的id?
答案 0 :(得分:9)
查看NamedParameterJdbcTemplate和JdbcTemplate的文档您有两种选择:
使用NamedParameterJdbcTemplate
' update方法。
使用JdbcTemplate
' update方法。
还有一些其他方法可以填充给定GeneratedKeyHolder的密钥,它取决于您的需求。
修改强>
例如使用JdbcTemplate:
GeneratedKeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement statement = con.prepareStatement("INSERT INTO SOME_TABLE(NAME, VALUE) VALUES (?, ?) ", Statement.RETURN_GENERATED_KEYS);
statement.setString(1, "SomeName");
statement.setString(2, "SomeValue");
return statement;
}
}, holder);
long primaryKey = holder.getKey().longValue();
答案 1 :(得分:0)
这不适用于PostgreSQL,所有者返回所有属性。这是PostgreSQL Spring: How to use KeyHolder with PostgreSQL
中解决方案的链接