0
我試圖在將新行插入到數據庫表後檢索生成的密鑰。我試圖用一個KeyHolder
和PreparedStatement
來實現這一點,但得到這個異常:SQL插入Spring JDBC後獲取生成的密鑰
org.springframework.dao.DataRetrievalFailureException:
生成的關鍵是支持的數字類型的不行。
無法施放[oracle.sql.ROWID]至[java.lang.Number中]
所以它似乎像的JdbcTemplate的更新方法返回的行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 (?, ?, ?)
添加您的SQL語句。 –
@Rene不幸的是,這不是這個問題的重複。這個問題涉及spring-jdbc功能,以及在Oracle上應用'正常'JDBC方式時返回ROWID而不是實際生成的標識的具體問題。 –