java - 插入抛出无效的列索引

标签 java oracle prepared-statement sqlexception

我有一个具有以下方案的 Oracle 数据库:

  • DM_ID,自动编号 PK
  • t_ID,varchar
  • 工作流程,varchar
  • 技术,varchar
  • 名称_事件,varchar
  • 时间_事件、日期

我使用以下方法在数据库中进行一些插入。

private void insert(String folder, int seconds) throws SQLException {
          stm = connection.prepareStatement("INSERT INTO DM_PROCMON (DM_ID,t_ID, WORKFLOW, TECHNOLOGY, NAME_EVENT, TIME_EVENT) VALUES(DM_ID.nextval,'?', 'up', 'Folder','?', ?)");
            stm.setString(1, String.format("%d%d%d.txt",random.nextInt(999),random.nextInt(999),random.nextInt(999)));
            stm.setString(2, folder);
            stm.setTime(3, new Time(seconds * 1000));
            stm.execute();
        }

我得到的是一个 SQL 异常,其中显示:

java.sql.SQLException: Invalid column index

当我调试时,我看到它上线了:

stm.setString(2, folder);

我不明白问题出在哪里。

最佳答案

移除 ? 周围的顶点

stm = connection.prepareStatement("INSERT INTO DM_PROCMON (DM_ID,t_ID, WORKFLOW, TECHNOLOGY, NAME_EVENT, TIME_EVENT) VALUES(DM_ID.nextval,?, 'up', 'Folder',?, ?)");

然后重试。

PreparedStatement 的方法 setString,为您处理任何字符串周围的顶点。

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

相关文章:

sql - ORA-00907: 缺少右括号

java - 如何为此查询编写准备好的语句?

java - 从Camel文件组件开始

java - 如何在android中的 Activity 之间传递 boolean 值?

java - 正则表达式查找两个选项卡之间的文本(java pattens)

mysql - 在不指定表的情况下执行语句

mysql - SQL 案例给出不一致的结果

java - 多个语句的 PreparedStatement

mysql - 在查询中包含可重复使用的文本 block

Java HTML 解析(链接)