我想使用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