java - preparedStatement 中的列索引无效

标签 java oracle jdbc prepared-statement

我试图在数据库表中插入一个值,但我一直遇到无效列索引错误。

这是一个代码示例:

        String insertNewAlarmStat =
            "insert into alarmes (id_alarm, alarm_key, id_notif, sever, urgency, date_hour_start, date_hour_modif, date_hour_end, " +
                    "state, state_rec, date_hour_rec,  id_user_rec, id_system_rec, " +
                    "type, cause, " +
                    "num_events, id_entity_g, type_entity_g, " +
                    "desc_entity_g, problem, " +
                    "time_urg_act, max_urg_act, time_end, time_arq, lim, rec_oblig, dn, num_events_ps, id_alarm_o, id_notif_o, text_ad, domain, date_hour_reg) " +
                    "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, SYSDATE, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE)";
    PreparedStatement prpstmt = null ;
    try {
        prpstmt = conn.prepareStatement(insertNewAlarmStat);

        prpstmt.setInt(1, randomNumberGenerator());
        prpstmt.setString(2, UUID.randomUUID().toString());
        prpstmt.setString(3, UUID.randomUUID().toString());
        prpstmt.setInt(4, randomNumberGenerator());
        prpstmt.setInt(5, 8);
        prpstmt.setInt(6, 8524);
        prpstmt.setString(7, UUID.randomUUID().toString());
        prpstmt.setString(8, UUID.randomUUID().toString());
        prpstmt.setString(9, UUID.randomUUID().toString());
        prpstmt.setString(10, UUID.randomUUID().toString());
        prpstmt.setString(11, "KABOOM");
        prpstmt.setInt(12, 8);
        prpstmt.setDate(13, getCurrentDate());
        prpstmt.setDate(14, getCurrentDate());
        prpstmt.setDate(15, getCurrentDate());
        prpstmt.setDate(16, getCurrentDate());
        prpstmt.setInt(17, 43);
        prpstmt.setString(18, UUID.randomUUID().toString());
        prpstmt.setString(19, UUID.randomUUID().toString());
        prpstmt.setString(20, UUID.randomUUID().toString());
        prpstmt.setString(21, UUID.randomUUID().toString());
        prpstmt.setInt(22, 2);
        prpstmt.setInt(23, 224);
        prpstmt.setInt(24, 2);
        prpstmt.setInt(25, 224);            
        prpstmt.setInt(26, 2);
        prpstmt.setInt(27, 4);          
        prpstmt.setInt(28, 2);  
        prpstmt.setString(29, null);
        prpstmt.setString(30, UUID.randomUUID().toString());
        prpstmt.setString(31, UUID.randomUUID().toString());            
        prpstmt.setInt(32, 2);  

        prpstmt.execute();

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我尝试将 prpstmt 从 13 删除到 16,但它提示说这些索引丢失了,我也尝试了其他方法,但我无法让它工作。

我做错了什么?

最佳答案

删除

prpstmt.setDate(13, getCurrentDate());
prpstmt.setDate(14, getCurrentDate());
prpstmt.setDate(15, getCurrentDate());
prpstmt.setDate(16, getCurrentDate());

而不是 17,再次从 13 开始..

?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, SYSDATE, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE

1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,SYSDATE, SYSDATE, SYSDATE, SYSDATE,13,14....等

关于java - preparedStatement 中的列索引无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429806/

相关文章:

java - 查询在数据库上运行但在java中抛出异常

mysql - 来自数据库的实体类....错误无效资源_pm

java - 如何处理数组 :Exception in thread "main" java. lang.ArrayIndexOutOfBoundsException: 3

java - 尝试与 Bamboo 一起运行时,Selenium 测试挂起

java - 什么是struts2序列化

java - 如何使用 Spring(和 Quartz)动态启动预定作业?

sql - 如何用文字显示数值

c# - 使用 C# 中的 odp.net 和 OCI 连接到 Oracle

database - 如何在 oracle 11g (windows 8) 中启用分区?

java - 在几次 next() 调用后从 ResultSet 获取 RowCount