Я пытаюсь выполнить подготовленные Постулаты, используя следующий:prepareStatement(), как представляется, зачистки точки с запятой
dbaBean.setPrepStmt(dbaBean.getConn().prepareStatement(
"SELECT id, author, title, url, article_text, date_created " +
"FROM articles WHERE " +
"(EXTRACT(YEAR FROM date_created) = ? OR ? is null) " +
"AND (EXTRACT(MONTH FROM date_created) = ? OR ? is null) " +
"AND (EXTRACT(DAY FROM date_created) = ? OR ? is null) AND " +
"(url = ? OR ? is null) " +
"ORDER BY date_created DESC;"));
dbaBean.getPrepStmt().setString(1, year);
dbaBean.getPrepStmt().setString(2, year);
dbaBean.getPrepStmt().setString(3, month);
dbaBean.getPrepStmt().setString(4, month);
dbaBean.getPrepStmt().setString(5, day);
dbaBean.getPrepStmt().setString(6, day);
dbaBean.getPrepStmt().setString(7, URL);
dbaBean.getPrepStmt().setString(8, URL);
System.out.println(dbaBean.getPrepStmt().toString());
dbaBean является объектом, который обеспечивает связь и подготовленные Постулаты. Это не делает никаких манипуляций вообще.
Я успешно использовал вышеуказанный код для других методов и не имел никаких проблем с ним. Теперь эта функция, как представляется, зачищает точку с запятой в конце, например. это выводится с помощью строки System.out:
SELECT id, author, title, url, article_text, date_created FROM articles WHERE (EXTRACT(YEAR FROM date_created) = NULL OR NULL is null) AND (EXTRACT(MONTH FROM date_created) = NULL OR NULL is null) AND (EXTRACT(DAY FROM date_created) = NULL OR NULL is null) AND (url = 'someurl' OR 'someurl' is null) ORDER BY date_created desc
Обратите внимание, что точка с запятой не указана.
Я попытался добавить вторую точку с запятой, и она тоже «съедена».
Другие изменения передаются штрафом (например, другим полем для выбора).
Это постгреск, если это имеет значение.
Редактировать: Мне очень жаль, потому что у меня ошибка при выполнении этого запроса, и я подумал, что падение точки с запятой является потенциальной ошибкой. Ниже приведенные ответы указывают на то, что это не так, и мне нужно искать в другом месте.
Почему вас это волнует? Точка с запятой не является частью оператора SQL, она скорее является разделителем и не нужна, если вы выдаете только один оператор. –
Он * не * имеет значение до тех пор, пока оператор выполняет штраф. – adarshr
Я согласен с предыдущими комментариями. Точка с запятой не является частью инструкции SQL - она используется интерфейсами СУБД, чтобы указать, что команда SQL закончена и готова к выполнению (если вы только нажмете ENTER, она поймет, что вы набираете многострочную команду). Ergo, подготовленное заявление, вероятно, ограничивает терминаторы, чтобы сохранить только то, что действительно является вашим заявлением. – rlinden