我正在尝试使用 Spring 的 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 没有将 oracle RowId 映射到 java RowId。
任何人都可以建议有什么方法可以提取 key 吗? (是的,它可以使用 PreparedStatement 来完成,但它使我的代码在某些情况下难以阅读和操作)。非常感谢您的建议。
最佳答案
你必须使用这个
namedParameterJdbcTemplate.update("INSERT INTO TABLE(ID, col1, col2)"
+ "VALUES(TABLE.TABLE_SEQ.NEXTVAL, :param1, :param2)",
parameters, keyHolder, new String[]{"ID"});
关于java - 有没有办法使用 NamedParameterJdbcTemplate 和 GeneratedKeyHolder 提取主键(或 ROWID)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450996/