我尝试在将新行插入数据库表后检索生成的密钥。我尝试使用KeyHolder
和PreparedStatement
来实现此目的但是得到了这个例外:
org.springframework.dao.DataRetrievalFailureException:
生成的密钥不是受支持的数字类型 无法将[oracle.sql.ROWID]强制转换为[java.lang.Number]
因此看起来JDBCTemplate的update方法返回行id,这不是我想要实现的。这是我为此写的代码:
String sql = Sql.CREATE_VORGANG;
final KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, fuehrungskraftPersonalnummer);
ps.setString(2, mitarbeiterPersonalnummer);
ps.setString(3, statusId);
return ps;
}
}, holder);
该表使用一个触发器,每次插入新行时,该触发器都会生成一个带序列的新值。该值将插入表的列ID_VORGANG中。
我错过了一些明显的东西吗?
编辑: 执行的SQL语句:
Insert into TRAL_VORGANG (FK_PERSONALNUMMER, MA_PERSONALNUMMER, STATUS_ID) values (?, ?, ?)
答案 0 :(得分:1)
这是:
long id = holder.getKey().longValue();