【问题标题】:Fire Sequence.nextval query using jdbctemplate in spring在春季使用 jdbctemplate 触发 Sequence.nextval 查询
【发布时间】:2015-03-20 23:58:29
【问题描述】:
数据库:Oracle
我有一个表,其中有 10 列,我希望在插入行时对下一个值进行排序,并使用插入的序列号。
现在我已经搜索并发现 Spring 的 KeyHolder 很有用,但仅限于少于 8 个字段,所以我不能使用它。
如何使用jdbctemplate(NamedParameterJDBCTemplate) 触发"select MySequence.nextval from dual" 查询并获取序列?
还有其他方法可以实现获取插入的序列值吗?
【问题讨论】:
标签:
java
database
spring
oracle
jdbctemplate
【解决方案1】:
使用jdbctemplate,您可以将序列生成器作为值提及,例如
jdbcTemplate.update("INSERT INTO TABLE (id, data) VALUES (MySequence.nextval, ?)", new Object[] { data });
关于序列生成的注意事项:对于 Oracle 12c 之前的版本,您应该有一个触发器,它将为您增加序列。从 12c 开始,您可以使用自动增量功能。
【解决方案2】:
您可以像这样使用 JdbcTemplate 来实现:
final SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(NEXT_VALUE_QUERY);
sqlRowSet.next();// mandatory to move the cursor
sqlRowSet.getLong(1);// the value of the nextval