java.sql.SQLException: ORA-00928: отсутствует ключевое слово SELECT. при вставке записи в БД с использованием JDBC
Я получаю сообщение об ошибке при попытке вставить несколько строк в БД. так вот код
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, дважды проверил столбцы (все они имеют одинаковое имя), удалил кавычки из имени столбца (тот же результат), но безуспешно. чтобы добавить это, сообщение об ошибке не очень полезно.
Мы ценим любые предложения.
6 ответов
Я могу определить две проблемы:
- Нет необходимости в одинарных кавычках вокруг имен столбцов. Но вы можете заключить его в двойные кавычки. Это необходимо, если вы используете зарезервированные ключевые слова для имен столбцов или таблиц. Вот
DATE
, - Вам нужно место, прежде чем
VALUES
,
Так что вам нужно изменить insertStmt
что-то вроде этого:
String insertStmt = "INSERT into " +
"MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
"VALUES(?, ?, ?, ?, ?);";
Вам нужно изменить SQL
заявление. (Никогда не используйте зарезервированные слова в качестве идентификаторов)
String insertStmt = "INSERT into \"MY_TABLE\" (RECORD_TYPE,FILE_TYPE,
\"DATE\",BATCH_NO,RECORD_COUNT) VALUES (?, ?, ?, ?, ?)";
использование "
(двойные кавычки), чтобы избежать зарезервированных слов / ключевых слов.
Напечатайте insertStmt String в консоли и попробуйте запустить его непосредственно в бэкэнде. Это дает вам точную ошибку в бэкэнде. Он видит некоторый интервал или синтаксическую ошибку.
Я только что зашел на эту страницу во время поиска 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
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Для других, ищущих ту же ошибку: другие синтаксические проблемы с запросом могут вызвать то же исключение. Например, опуская слово VALUES.
У меня была та же проблема, и в моем случае запрос был таким:
insert into Address (number, street, id) values (?, ?, ?)
Проблема была вызвана number
имя столбца с number
является зарезервированным ключевым словом в Oracle, и исключение было своего рода вводящим в заблуждение ORA-00928: missing SELECT keyword
,
После побега number
столбец, оператор был выполнен нормально:
insert into Address ("number", street, id) values (?, ?, ?)