java - 有没有办法使用 NamedParameterJdbcTemplate 和 GeneratedKeyHolder 提取主键(或 ROWID)?

标签 java spring ojdbc

我正在尝试使用 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/

相关文章:

java - 无法使用 jsch 运行 top 命令

java - 无法从通用 Xpath 检索值

java - 设计可扩展的应用程序

java - 获取加载 Spring 上下文的监听器

java - 如何为neatebeans maven javafx项目安装好maven

apache-nifi - Apache NiFi DBCPConnectionPool ORA-00933 : SQL command not properly ended for 'select 1 from dual;'

java - 当 oraclepki、osdt_cert 和 osdt_core 在类路径上时,从 Jav 6 升级到 Java 8 后无法登录 Web 应用程序

java - 完成删除和插入抛出刷新异常

java - 将请求参数转换为泛型类

java - 如何使用 Spring 从 ldap 检索只读属性