我想使用Spring的NamedParameterJdbcTemplate和GeneratedKeyHolder提取ROWID或主鍵。有沒有辦法使用NamedParameterJdbcTemplate和GeneratedKeyHolder提取主鍵(或ROWID)?
我想要做這樣的事情。
MapSqlParameterSource parameters = new MapSqlParameterSource()
.addValue("param1", value1)
.addValue("param2", value2);
KeyHolder keyHolder = new GeneratedKeyHolder();
namedParameterJdbcTemplate.update("INSERT INTO TABLE(ID, col1, col2)"
+ "VALUES(TABLE.TABLE_SEQ.NEXTVAL, :param1, :param2)",
parameters, keyHolder);
上面的查詢執行後,當我嘗試做keyHolder.getKey().longValue()
它拋出異常下面。
HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataRetrievalFailureException: The generated key is not of a supported numeric type. Unable to cast [oracle.sql.ROWID] to [java.lang.Number]
當我通過這個http://docs.oracle.com/cd/B28359_01/java.111/b31224/datacc.htm我的理解去(我希望我所做的)這ojdbc沒有映射甲骨文RowId的java的RowId的。
任何人可以建議是否有任何方法來提取密鑰? (是的,它可以使用PreparedStatement完成,但它使我的代碼在一些條件下難以閱讀和操作)。你的建議非常感謝。
列名我不知道你是否有同樣的問題,但你檢查此鏈接http://stackoverflow.com/questions/4496336/nextval-jdbc-insert-problem。 – 2012-07-12 12:13:40
ROWID不是數字類型,請嘗試獲取字符串。 – Jason 2012-07-13 03:51:16