gpt4 book ai didi

java - 在 Oracle 12C jdbc 驱动程序中获取自动递增 key 时出现 NPE

转载 作者:行者123 更新时间:2023-12-02 05:05:47 25 4
gpt4 key购买 nike

我在恢复 oracle 12c 中的自动递增 key 时收到 NPE。我正在使用从 oracle 站点下载的 ojdbc7.jar for oracle 12c。版本 - 12.1.0.1.0。这是堆栈跟踪。

java.lang.NullPointerException
at oracle.jdbc.driver.AutoKeyInfo.initMetaDataKeyFlag(AutoKeyInfo.java:404)
at oracle.jdbc.driver.AutoKeyInfo.initMetaData(AutoKeyInfo.java:392)
at oracle.jdbc.driver.OracleReturnResultSet.getMetaData(OracleReturnResultSet.java:77)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getMetaData(DelegatingResultSet.java:322)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getMetaData(DelegatingResultSet.java:322)
at org.springframework.jdbc.core.ColumnMapRowMapper.mapRow(ColumnMapRowMapper.java:52)

我正在使用 spring jdbc 及其 keyHolder 来取回 key 。而在 oracle 端使用序列来生成 id。

在hibernate论坛的某个地方阅读,它是jdbc驱动程序本身的一个错误,但oracle论坛对我来说是受限的。 Hibernate forum link 。任何有同样问题的人以及他们如何解决这个问题。

示例代码:

public Double insert(Definition definition) {
final String name = definition.getName();
final String desc = definition.getDesc();
final String type= definition.getType();
final String insertSql = "INSERT INTO DEFINITION (ID, TYPE, NAME, DESC) VALUES (MY_SEQ.NEXTVAL,?,?,?)";
KeyHolder holder = new GeneratedKeyHolder();

getJdbcTemplate().update(new PreparedStatementCreator() {

@Override
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
PreparedStatement ps = connection.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, type);
ps.setString(2, name);
ps.setString(3, desc);
return ps;
}
}, holder);

Double generatedId = holder.getKey().doubleValue();
return generatedId;
}

最佳答案

该问题已在驱动程序版本 12.2 中修复。当它公开时,您将获得修复,否则您可以联系 Oracle 支持并请求驱动程序补丁。

仍在等待 12.2 的公开发布

关于java - 在 Oracle 12C jdbc 驱动程序中获取自动递增 key 时出现 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com