Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:ORA-00928:缺少SELECT关键字。使用JDBC将记录插入数据库时_Java_Oracle_Jdbc_Ora 00928 - Fatal编程技术网

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

java.sql.SQLException:ORA-00928:缺少SELECT关键字。使用JDBC将记录插入数据库时,java,oracle,jdbc,ora-00928,Java,Oracle,Jdbc,Ora 00928,当我尝试向数据库插入一些行时,我遇到了一个错误。这是代码 try { String insertStmt = "INSERT into " + "MY_TABLE('RECORD_TYPE', 'FILE_TYPE', 'DATE', 'BATCH_NO', 'RECORD_COUNT')" + "VALUES(?, ?, ?, ?, ?);"; PreparedStatement

当我尝试向数据库插入一些行时,我遇到了一个错误。这是代码

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();
}
db上的所有内容都是varchar类型,仔细检查了列(它们都是相同的名称),去掉了列名的引号(相同的结果),没有成功。总而言之,错误消息没有多大帮助


如有任何建议,我们将不胜感激。

在控制台中打印insertStmt字符串,并尝试在后端直接启动它。它会在后端为您提供确切的错误。它似乎出现了一些空格或语法错误。

您需要更改
SQL
语句。(切勿将保留字用作标识符)


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

我可以发现两个问题:

  • 列名周围不需要单引号。但可以用双引号将其括起来。如果要对列名或表名使用保留关键字,则必须使用双引号。此处为
    DATE
  • 值之前需要一个空格
  • 因此,您需要将
    insertStmt
    更改为如下内容:

    String insertStmt = "INSERT into " +
        "MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
        "VALUES(?, ?, ?, ?, ?);";
    
    insert into Address (number, street, id) values (?, ?, ?)
    

    我只是在搜索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
      (?, ?, ?, ?, ?, ?, ?, ?, ?)
    

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

    我正在运行相同的问题,在我的情况下,查询如下所示:

    String insertStmt = "INSERT into " +
        "MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
        "VALUES(?, ?, ?, ?, ?);";
    
    insert into Address (number, street, id) values (?, ?, ?)
    
    问题是由
    number
    列名引起的,因为
    number
    是Oracle中的保留关键字,例外情况是有点误导
    ORA-00928:缺少SELECT关键字

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

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

    请尝试不使用引号(如果有的话,应该是双引号),不使用尾随分号,并且在
    值之前加上空格。
    记录计数和值之间没有空格(…因此您的insert命令看起来像是“插入我的表(…)值(??)`我认为您将始终需要使用双引号,因为日期通常是无效的标识符(这就是为什么您不应该将其用作列名的原因。另外,为什么它存储为字符串?)实际上,在
    之前不需要空格,尽管通常这样看起来更好。删除查询结束双引号之前的分号。是的,我尝试从db ide插入一条记录,知道有一些语法错误。感谢jwalin的回答。感谢他们,我正要在这里回答这个问题。yep,日期列需要用双引号括起来,然后转义。谢谢你的回答:D:D:害怕OP和标题-这都是关于oracle的。