java - 如何使用 OJDBC 取回生成的 ID?

标签 java oracle

我试图在使用 ojdbc 插入后获取自动生成的 id。

我的代码是这样的:

public void insert(Connection con) throws SQLException {
    String query = "INSERT INTO MY_TABLE (ID, FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, FIELD6, FIELD7, FIELD8) VALUES (SEQ_MY_TABLE_ID.NEXTVAL, ?, ?, ?, ?, ?, ?, ?, ?)";
    PreparedStatement stmt = null;
    try {
        stmt = con.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
        stmt.setBigDecimal(1, null == field1 ? null : new BigDecimal(field1));
        stmt.setBigDecimal(2, null == field2 ? null : new BigDecimal(field2));
        stmt.setBigDecimal(3, field3);
        stmt.setString(4, field4);
        stmt.setBigDecimal(5, field5);
        stmt.setBigDecimal(6, null == field6 ? null : new BigDecimal(field6));
        stmt.setBigDecimal(7, null == field7 ? null : new BigDecimal(field7));
        stmt.setString(8, field8);
        stmt.executeUpdate();
        ResultSet idResults = stmt.getGeneratedKeys();
        if(null != idResults && idResults.next()){
            id = null == idResults.getBigDecimal(ID_COLUMN_NAME) ? null : idResults .getBigDecimal(ID_COLUMN_NAME).toBigInteger();
            //do something with the id we get back from the database 
        }
    } finally {
        cleanupConnection(con, stmt, null);
    }
}

我收到 java.lang.ArrayIndexOutOfBoundException: 8

最佳答案

尝试如下更改您的PreparedStatement。我认为您需要列出数组中的所有列并将其作为参数传递给prepareStatement。这可能会修复 ArrayIndexOutOfBoundException。

stmt = con.prepareStatement(query, new String[] {"ID","FIELD1","FIELD2","FIELD3","FIELD4","FIELD5","FIELD6","FIELD7","FIELD8"});

关于java - 如何使用 OJDBC 取回生成的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061681/

相关文章:

oracle - 从 python 连接到 oracle 时 sys 用户登录被拒绝

java - 即使数据来自 Ehcache,c3p0 也始终调用 commit

java - Java 与 JSP 的 JSTL 的性能比较

java - 在示例 Java 项目中使用数据库的最简单方法?

java - Struts2 填充 <s :property> tags in JSP page 的计时

database - Oracle 行更改时间戳

java - 如何将不同方案的两个事务合并为一个?

sql - Oracle:将任意列表与从表中选择相结合

java - 如何从 Constant Value 类中分配 list 中的 API key ?

java - 如何将 HttpServletRequest 对象中包含的所有参数(名称和值)表示为单个字符串?