使用H2 SQL查询会产生奇怪的行为。在Ubuntu Linux上使用Java8,spring-jdbc:4.3.13,h2:1.4.199。
更新:确认这是一个错误,请检查答案
我有一个这样的PERSON表:
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, John)
Integer.MAX_VALUE - 1, 2
),我得到(3, Frank)
因此,除非我使用很高的限制值,否则偏移量是正常工作的,在这种情况下,我不知道发生了什么。
与我尝试其他类似“ LIMIT?,?”的变体相同(并切换值)。
那么这是一个错误还是H2 / JDBC的已知限制?
当我对值进行硬编码时,也会发生同样的情况:
SELECT * FROM person ORDER BY id DESC LIMIT 2147483646 OFFSET 2
使用spring-jdbc和rowmappers涉及到Java代码,所以我不能轻易地将其粘贴在这里。
答案 0 :(得分:1)
已在https://github.com/h2database/h2database/issues/2025报告并确认
此问题是由于SortOrder.sort(ArrayList,int,int)中的溢出引起的。
解决方法是避免在不需要限制时生成FETCH,LIMIT或TOP子句。