Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC应用程序从表中提取大量记录_Java_Oracle_Jdbc_Primary Key_Rownum - Fatal编程技术网

Java 使用JDBC应用程序从表中提取大量记录

Java 使用JDBC应用程序从表中提取大量记录,java,oracle,jdbc,primary-key,rownum,Java,Oracle,Jdbc,Primary Key,Rownum,我在Oracle数据库上有一些巨大的表,其中有数百万条记录,我想在Java JDBC应用程序的帮助下提取所有记录,并将它们存储为文件。 由于记录数量巨大,我希望使用WHERE语句对select查询进行分区,并以迭代的方式进行提取和存储。提取数据期间存在插入/更新/删除操作 到目前为止,我一直在尝试: 对行号使用分页方式,这是不完全正确的,因为查询行号可能会更改,因此查询可能不会覆盖所有记录。 看 使用主键分割记录并提取和存储数据。 这是不可行的,至少我认为如果我们有复合主键或者没有数字主键,比如

我在Oracle数据库上有一些巨大的表,其中有数百万条记录,我想在Java JDBC应用程序的帮助下提取所有记录,并将它们存储为文件。 由于记录数量巨大,我希望使用WHERE语句对select查询进行分区,并以迭代的方式进行提取和存储。提取数据期间存在插入/更新/删除操作

到目前为止,我一直在尝试:

对行号使用分页方式,这是不完全正确的,因为查询行号可能会更改,因此查询可能不会覆盖所有记录。 看

使用主键分割记录并提取和存储数据。 这是不可行的,至少我认为如果我们有复合主键或者没有数字主键,比如VARCHAR,会发生什么。
值得一提的是,哪种存储记录的复制是可以的。

在读取具有适当提取大小的普通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