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的。