Postgresql 在 jdbcTemplate 中给出标准 SQL OFFSET 和 FETCH NEXT 的语法错误

问题描述 投票:0回答:0

嗨我有一个本机查询:

SELECT * FROM mytable ORDER BY column_a OFFSET ? FETCH NEXT ? ROWS ONLY

翻译成

SELECT * FROM mytable ORDER BY column_a OFFSET $1 FETCH NEXT $2 ROWS ONLY

但是 Postgresql 返回错误:

org.postgresql.util.PSQLException: ERROR: syntax error at or near \"$2\"\n

如果我将查询更改为:

SELECT * FROM mytable ORDER BY column_a OFFSET ? LIMIT ?

然后没有错误。但是,LIMIT 版本不是标准 SQL,我想避免这种情况。此外,两个版本在 pgAdmin 中都运行正常,所以它似乎与 jdbc 相关?

知道为什么标准版本在 jdbc 中不起作用吗?谢谢

示例代码:

public ResultSet testQuery() {
    String query = "SELECT * FROM mytable ORDER BY column_a OFFSET ? FETCH NEXT ? ROWS ONLY";
    return jdbcTemplate.execute(query, (PreparedStatement ps) -> {
        ps.setInt(1, 0);
        ps.setInt(2, 10000);
        try (ResultSet rs = ps.executeQuery()) {
            return rs;
        }
    });
}
java postgresql jdbctemplate
© www.soinside.com 2019 - 2024. All rights reserved.