Java 使用JDBC应用程序从表中提取大量记录
我在Oracle数据库上有一些巨大的表,其中有数百万条记录,我想在Java JDBC应用程序的帮助下提取所有记录,并将它们存储为文件。 由于记录数量巨大,我希望使用WHERE语句对select查询进行分区,并以迭代的方式进行提取和存储。提取数据期间存在插入/更新/删除操作 到目前为止,我一直在尝试: 对行号使用分页方式,这是不完全正确的,因为查询行号可能会更改,因此查询可能不会覆盖所有记录。 看 使用主键分割记录并提取和存储数据。 这是不可行的,至少我认为如果我们有复合主键或者没有数字主键,比如VARCHAR,会发生什么。Java 使用JDBC应用程序从表中提取大量记录,java,oracle,jdbc,primary-key,rownum,Java,Oracle,Jdbc,Primary Key,Rownum,我在Oracle数据库上有一些巨大的表,其中有数百万条记录,我想在Java JDBC应用程序的帮助下提取所有记录,并将它们存储为文件。 由于记录数量巨大,我希望使用WHERE语句对select查询进行分区,并以迭代的方式进行提取和存储。提取数据期间存在插入/更新/删除操作 到目前为止,我一直在尝试: 对行号使用分页方式,这是不完全正确的,因为查询行号可能会更改,因此查询可能不会覆盖所有记录。 看 使用主键分割记录并提取和存储数据。 这是不可行的,至少我认为如果我们有复合主键或者没有数字主键,比如
值得一提的是,哪种存储记录的复制是可以的。在读取具有适当提取大小的普通JDBC单游标中的数据时,您会遇到哪些问题?您不应该使用ROWNUM;它在运行时被任意分配给您的结果集,并且不代表数据上的唯一键,也不反映数据在表中的存储方式。
select * from ( select /*+ FIRST_ROWS(n) */ a.*, ROWNUM rnum
from ( your_query_goes_here,
with order by ) a
where ROWNUM <=
:MAX_ROW_TO_FETCH ) where rnum >= :MIN_ROW_TO_FETCH;
SELECT * FROM TABLE WHERE PRIMARY_KEY < $MAX_DESIRE AND PRIMARY_KEY <$MIN_DESIRE