java.sql.SQLException:ORA-00928:缺少SELECT关键字.使用JDBC将记录插入DB时

nic*_* m. 8 java oracle jdbc ora-00928

当我尝试向db插入一些行时出错.所以这是代码

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();
}
Run Code Online (Sandbox Code Playgroud)

并且db上的所有内容都是varchar类型,双重检查列(它们都是相同的名称),从列名中取出引号(相同的结果)没有成功.添加它,错误消息不是很有帮助.

任何建议,将不胜感激.

ada*_*ost 5

您需要更改SQL声明.(绝不使用保留字作为标识符)

String insertStmt = "INSERT into \"MY_TABLE\" (RECORD_TYPE,FILE_TYPE, 
              \"DATE\",BATCH_NO,RECORD_COUNT) VALUES (?, ?, ?, ?, ?)";
Run Code Online (Sandbox Code Playgroud)

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


Jom*_*oos 4

我可以发现两个问题:

  1. 列名不需要单引号。但您可以将其用双引号引起来。如果您对列名或表名使用保留关键字,则这是必需的。这里DATE
  2. 你之前需要一个空间VALUES

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

String insertStmt = "INSERT into " +
    "MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
    "VALUES(?, ?, ?, ?, ?);";
Run Code Online (Sandbox Code Playgroud)