如何从java中批量获取来自oracle的数据

时间:2018-05-28 08:31:37

标签: java sql oracle

我有一张桌子 -

emp_record

有40,000条记录 我想从java代码中获取记录,下面是要求 -

  1. 一次只能返回1000条记录
  2. 在接下来的下一个1000条记录中
  3. 继续直到所有记录耗尽
  4. 不应嵌套SQL查询,例如
  5.  select *
     from(
     SELECT a.*,rownum rn 
     FROM distributor  a)
     WHERE rn  >= 3000 and rn < 4000; 
    

    非常感谢任何形式的帮助。

2 个答案:

答案 0 :(得分:3)

这听起来非常人为,因为40.000记录什么都不是。我只想在一个查询中阅读它们,也许可以分批将它们分开。在这种情况下,您可以使用statement.setFetchSize(1000)使JDBC驱动程序一次获取1000条记录,并将其定位为解决需求。

或者,如果您使用的是Oracle 12,则可以使用:

select * from distributor
order by something_unique
offset x rows fetch next 1000 rows only

其中x是起始位置。它与rownum构造完全相同,但语法更好。

答案 1 :(得分:0)

您可以首先使用主键/唯一键对行进行排序,从而使用使用ROWNUM的查询。来自查询的想法:Best practice for pagination in Oracle?

SELECT * 
  FROM (SELECT A.*, rownum rn
          FROM (SELECT *
                  FROM emp_record
                 ORDER BY pri_key_col) A
         WHERE rownum <= :n * 1000)
 WHERE rn > (:n - 1) * 1000;
  • pri_key_col:表格的主键/唯一键列。
  • n:表示批次的数字。如果n = 1,则返回1000 以这种方式订购的记录,n = 2给出下一个1000,依此类推。