Java SQL [ 限制 | rownum ...] 统一化 API

Posted

技术标签:

【中文标题】Java SQL [ 限制 | rownum ...] 统一化 API【英文标题】:Java SQL [ limit | rownum ... ] uniformization API 【发布时间】:2011-10-13 17:40:10 【问题描述】:

我面临着在执行查询而不是在为用户提供结果时添加“数据库分页”的任务。 问题是每个数据库引擎都有自己的 SQL 方法,用于从整个集合中减去一组结果。更准确地说,如果想要结果 NN+d 使用:

mysql ---> select X from Y where Z limit N, d

oracle --> select * ( select X, ROW_NUMBER() OVER ( ORDER BY Y.colName ) from Y where Z ) WHERE R BETWEEN N and N+d

目前我们提供对 Oracle 和 MySQL 的支持,但我们永远无法知道客户的请求,因此我正在尝试提供一个通用的实现,因此我正在寻找一个提供如下功能的库:

qWithSubset = performLimitationOverQuery( qNoSubset, offset, amount, sortOnSet ) 

欢迎提出任何建议。谢谢。

【问题讨论】:

Is there a portable way to have "SELECT FIRST 10 * FROM T" semantic?的可能重复 @Icarus 鉴于它被标记为 Java,我猜不是。 @DaveNewton 哈哈哈我猜,也不是……我没注意java标签。 【参考方案1】:

任何JPA 实现,例如Hibernate,都在您的代码和数据库之间提供了一个抽象级别。

公平地说,它不仅仅是处理分页。但是,如果您愿意的话,您可以查看和/或借用其数据库“方言”的实现来处理分页,而无需改变您处理数据库的一般方式。

【讨论】:

以上是关于Java SQL [ 限制 | rownum ...] 统一化 API的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 中的 ROWNUM 有替代品吗?

Oracle 分页查询rownum的用法

Oracle数据库rownum和row_number的不同点

SQL 调优,长时间运行的查询 + rownum

Oracle/SQL:为啥查询“SELECT * FROM records WHERE rownum >= 5 AND rownum <= 10” - 返回零行

#SQL #QUERY #ROWNUM #ORACLE