Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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
JDBC性能-将大型结果集从数据库传递到Java_Java_Oracle - Fatal编程技术网

JDBC性能-将大型结果集从数据库传递到Java

JDBC性能-将大型结果集从数据库传递到Java,java,oracle,Java,Oracle,我有一个与性能相关的问题。我需要从数据库中检索大约500行,以便使用ApachePOI将结果导出到MicrosoftExcel电子表格中 到目前为止,对于所有的数据库查询,我一直在数据库层中填充一个PL/SQL对象,然后将该PL/SQL对象返回给Java并循环遍历结果 但是现在我需要从db层向Java返回如此大的结果集,有人问我一个问题,我是否认为通过XMLCLOB将500行返回Java会更好 这是一个有点悬而未决的问题,但我希望能得到大家的意见 谢谢使用Java结果集。这将一次只获取一些行,因

我有一个与性能相关的问题。我需要从数据库中检索大约500行,以便使用ApachePOI将结果导出到MicrosoftExcel电子表格中

到目前为止,对于所有的数据库查询,我一直在数据库层中填充一个PL/SQL对象,然后将该PL/SQL对象返回给Java并循环遍历结果

但是现在我需要从db层向Java返回如此大的结果集,有人问我一个问题,我是否认为通过XMLCLOB将500行返回Java会更好

这是一个有点悬而未决的问题,但我希望能得到大家的意见


谢谢使用Java结果集。这将一次只获取一些行,因为您需要它们。下面是一个如何使用它的示例:
基本上,每次请求新行时,如rs.next()中所示,JDBC系统都会决定数据是否在客户端可用,或者是否需要从服务器获取。这样,您就不会一次获取所有数据。

使用Java结果集。这将一次只获取一些行,因为您需要它们。下面是一个如何使用它的示例: 基本上,每次请求新行时,如rs.next()中所示,JDBC系统都会决定数据是否在客户端可用,或者是否需要从服务器获取。这样,您就不会一次获取所有数据。

根据

默认情况下,当Oracle JDBC运行查询时,它会检索结果集 从数据库游标一次删除10行。这是默认设置 Oracle行获取大小值。您可以更改行数 通过更改行,在每次访问数据库游标时检索 获取大小值

以下方法在所有语句、PreparedStatement、CallableStatement和ResultSet对象中都可用,用于设置和获取提取大小:

void setFetchSize(int rows) throws SQLException
int getFetchSize() throws SQLException
依照

默认情况下,当Oracle JDBC运行查询时,它会检索结果集 从数据库游标一次删除10行。这是默认设置 Oracle行获取大小值。您可以更改行数 通过更改行,在每次访问数据库游标时检索 获取大小值

以下方法在所有语句、PreparedStatement、CallableStatement和ResultSet对象中都可用,用于设置和获取提取大小:

void setFetchSize(int rows) throws SQLException
int getFetchSize() throws SQLException

500行不算大,除非每行都很大。500行不算大,除非每行都很大。@ScaryWombat可能会调用数据库。实际情况是一次返回N行,其中N由您通过
语句.setFetchSize()控制。
@ScaryWombat可能会导致对数据库的调用。实际情况是一次返回N行,其中N由您通过
语句.setFetchSize()控制。
+1这通常是正确的答案-尽管500行确实不大。再次强调500行不大,我建议将fetch大小设置为与期望检索的行数相匹配,以限制对数据库的往返。YMMV,但我的经验是,最佳提取大小通常在500到1000行之间。@BrettOkken您知道最佳提取大小的数据大小是多少吗?显然,行大小可能会有很大差异。@ScaryWombat这是基于每个表的测试。很明显,像Blob、Club或UDT专栏之类的东西会影响这一点。我只是简单地说,我使用的大多数表都是500-1000的获取大小,试图最大化总吞吐量。+1这通常是正确的答案-尽管500行不算大。再次强调500行不算大,我建议将fetch大小设置为与期望检索的行数相匹配,以限制对数据库的往返。YMMV,但我的经验是,最佳提取大小通常在500到1000行之间。@BrettOkken您知道最佳提取大小的数据大小是多少吗?显然,行大小可能会有很大差异。@ScaryWombat这是基于每个表的测试。很明显,像Blob、Club或UDT专栏之类的东西会影响这一点。我只是简单地说,我使用的大多数表都是500-1000的获取大小,目的是最大限度地提高总体吞吐量。