Я пытаюсь сделать запрос, используя JDBC и PostgreSQL, но столкнулся со странной ситуацией, которую я не могу найти ни в одной документации.
Следующий запрос работает, если я выполняю его через pgAdmin и H2 (который я использую для модульных тестов для моего приложения), но я получаю синтаксическую ошибку, если я выполняю его через JDBC:
Queries.SELECT_SQL
SELECT columns
FROM Table
LEFT JOIN TableToJoin1
LEFT JOIN TableToJoin2
LEFT JOIN TableToJoin3
JOIN TableToJoin4
Queries.ENDING_PAGING_STATEMENT_SQL
OFFSET ? ROWS FETCH FIRST ? ROWS ONLY
Запрос SELECT
является правильным и работает нормально, используя любые средства, проблема в том, что я собираю оба запроса вместе, то есть оператор SELECT
вместе с OFFSET
и FETCH FIRST
.
Вот как я выполняю запрос через JDBC
:
// Receive offset and limit as argument.
try (final PreparedStatement selectStatement = connection
.prepareStatement(Queries.SELECT_SQL + Queries.ENDING_PAGING_STATEMENT_SQL)) {
selectStatement.setInt(Queries.PAGING_ENDING_STATEMENT_OFFSET_ARGUMENT_POSITION, offset);
selectStatement.setInt(Queries.PAGING_ENDING_STATEMENT_LIMIT_ARGUMENT_POSITION, limit);
final ResultSet resultSet = bookSelectStatement.executeQuery();
...
}
Вот сообщение об исключении, которое выдается:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$2"
Если я вызову selectStatement.toString()
для отладки, я получу запрос точно так, как я ожидаю.
Если я изменю OFFSET N ROWS FETCH FIRST M ROWS ONLY
на OFFSET N LIMIT M
, он будет работать через JDBC без каких-либо проблем.
Самое простое решение сделало бы это простое изменение выше, но часть моей задачи - сделать запрос с помощью этого оператора FETCH FIRST M ROWS ONLY
.
Итак, вы, ребята, можете помочь мне узнать, правильно ли я это делаю, или нет никакого способа использовать FETCH FIRST
на JDBC для PostgreSQL вообще? С некоторыми примерами или ссылками на любую документацию, которая может помочь.
Я заметил, что FETCH FIRST
не существует в Документация PostgreSQL: Запросы - смещение и ограничение , но, поскольку он работает через pgAdmin, я не знаю, почему у меня должны возникнуть какие-либо проблемы с использованием JDBC.
Спасибо большое!