8

当我尝试将一些行插入数据库时​​出现错误。所以这是代码

try {
    String insertStmt = "INSERT into " +
                        "MY_TABLE('RECORD_TYPE', 'FILE_TYPE', 'DATE', 'BATCH_NO', 'RECORD_COUNT')" +
                        "VALUES(?, ?, ?, ?, ?);";

    PreparedStatement pstmt = super.con.prepareStatement(insertStmt);

    pstmt.setString(1, input[0]);
    pstmt.setString(2, input[1]);
    pstmt.setString(3, input[2]);
    pstmt.setString(4, input[3]);
    pstmt.setString(5, input[4]);

    System.out.println("Insert rows : " + pstmt.executeUpdate());

} catch (SQLException sqle) {
    System.out.println(sqle.getMessage());
    sqle.printStackTrace();
} catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
} finally {
    con.close();
}

并且数据库上的所有内容都是 varchar 类型,仔细检查了列(它们都是相同的名称),从列名中取出引号(相同的结果)没有成功。加起来,错误消息不是很有帮助。

任何建议,将不胜感激。

4

6 回答 6

5

您需要更改SQL声明。(切勿使用保留字作为标识符)

String insertStmt = "INSERT into \"MY_TABLE\" (RECORD_TYPE,FILE_TYPE, 
              \"DATE\",BATCH_NO,RECORD_COUNT) VALUES (?, ?, ?, ?, ?)";

使用"(双引号)转义保留字/关键字。

于 2011-11-25T05:00:22.097 回答
4

我可以发现两个问题:

  1. 不需要在列名周围加上单引号。但是你可以用双引号括起来。如果您对列名或表名使用保留关键字,则必须这样做。在这里DATE
  2. 之前需要一个空格VALUES

所以你需要改变insertStmt成这样的东西:

String insertStmt = "INSERT into " +
    "MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
    "VALUES(?, ?, ?, ?, ?);";
于 2011-11-25T05:05:06.207 回答
2

在控制台中打印 insertStmt String 并尝试直接在后端触发它。它会在后端为您提供确切的错误。它看到一些空格或语法错误。

于 2011-11-25T04:43:40.033 回答
1

我刚刚在搜索 ORA-00928 时来到此页面,我想指出我的问题是列列表开头的额外逗号:

INSERT INTO redacted.redacted
  (
  , redacted_id   -- The comma at the start of this line will trigger ORA-00928.
  , another_redacted_id
  , redacted1
  , redacted2
  , redacted3
  , created_at
  , created_by
  , changed_at
  , changed_by
  )
  VALUES
  (?, ?, ?, ?, ?, ?, ?, ?, ?)
于 2012-10-01T21:48:19.657 回答
0

对于搜索相同错误的其他人:查询的其他语法问题可能导致引发相同的异常。例如,省略单词 VALUES。

于 2015-02-06T16:59:29.837 回答
0

我正在运行同样的问题,在我的情况下,查询是这样的:

insert into Address (number, street, id) values (?, ?, ?)

问题是由number列名引起的,因为number它是 Oracle 中的保留关键字,并且异常具有误导性ORA-00928: missing SELECT keyword

转义number列后,语句正常执行:

insert into Address ("number", street, id) values (?, ?, ?)
于 2016-04-27T08:58:31.470 回答