我通过使用h2 sql查询得到了奇怪的行为。在ubuntu linux上使用java8、spring jdbc:4.3.13、h2:1.4.199。
更新:确认这是一个错误,检查答案
我有一张这样的人桌:
id | name
1 | "John"
2 | "Jane"
3 | "Frank"
当我运行这个准备好的语句时:
-- (Note ordering is descending.)
SELECT * FROM person ORDER BY id DESC LIMIT ? OFFSET ?
-
可以使用:(
Integer.MAX_VALUE, 0
),我得到所有3行:
[(3, Frank), (2, Jane), (1, John)]
-
可以使用:(
20, 2
),我要划船
(1, John)
.
-
可以使用:(
Integer.MAX_VALUE - 2, 2
),我得到
(1,约翰)
-
不可以使用:(
Integer.MAX_VALUE - 1, 2
),我得到
(3, Frank)
所以偏移是正常工作的,除非我使用一个很高的数字作为极限,在这种情况下,我不知道发生了什么。
如果我尝试其他变体,比如“limit?,“?”(并切换值)。
那么这是一个bug,还是h2/jdbc的已知限制?
当我硬编码这些值时也会发生同样的情况:
SELECT * FROM person ORDER BY id DESC LIMIT 2147483646 OFFSET 2
Java代码使用Spring JDBC和RoMaMPES有点涉及,所以我不能很容易地粘贴到这里。