当前位置: 首页 > 面试题库 >

Spring JDBC支持和大型数据集

丁沛
2023-03-14
问题内容

当使用各种JDBC模板方法之一时,我对如何迭代/滚动大结果集(不适合内存)感到困惑。即使没有直接公开Iterable接口,我至少也希望RowQuerybackHandler实例在查询执行后(
不是在堆溢出之后)执行时被调用。

我也有在看一个这个(这什么都没有改变,我尽管是在精神上类似这个帖子上的堆栈溢出),并在该岗位在spring论坛。后者似乎暗示在游标获取数据时确实应该调用回调处理程序。但是,我的测试没有显示这种行为。

数据库是Oracle10g。我正在使用11.1.0.7.0-Production驱动程序和Spring
2.5.6.SEC01。有什么想法可以迭代结果集吗?最好在保持RowMapper等映射逻辑的同时?


问题答案:

Oracle
JDBC驱动程序对上的setFetchSize()方法具有适当的支持,该方法java.sql.Statement可让您控制驱动程序一次性读取多少行。

但是,RowMapperSpring使用的方法是将每一行读入内存,将其RowMapper转换为一个对象,并将每一行的对象存储在一个大列表中。如果结果集很大,则无论JDBC如何获取行数据,此列表都会很大。

如果您需要处理大型结果集,则RowMapper无法缩放。您可以考虑RowCallbackHandler改为使用JdbcTemplate上的相应方法。RowCallbackHandler并不决定结果的存储方式,而是由您来存储结果。



 类似资料:
  • 我正在尝试使用两个数据源与我的SpringBoot应用程序,但无法获得第二个数据源自动连接。我尝试过很多事情,但这是我最接近的一次: 我的Yaml文件: 这是我到目前为止最接近的一次。我之所以说它是最接近的,是因为如果我删除@qualifier,那么我的两个dao方法实际上都可以工作,假设SECOND_SELECT语句对于我的DB1是有效的SQL语句。当我为非主datasouce输入@Qualif

  • 谷歌云SQL提供的所有数据类型是什么? 我正在迁移一个数据库,所以我想知道谷歌云支持的数据类型。如果有任何官方链接,请提供。

  • pg 相对于其它关系型数据库的一大优势就在于成熟的复杂类型支持,包括数组、JSON 对象、HStore 等等。 Array pg 的数组功能非常强大,支持类型数组、多维数组、定长数组。 定义一个简单的数组列: CREATE TABLE sample_table ( array_example integer[], ); 对应插入语句: INSERT INTO sample_table

  • 1. 前言 动态 SQL 是 MyBatis 最标志性的特性之一。在其它框架中,你可能需要根据不同的条件来拼接 SQL,辗转在符号与条件的判断上,处理起来麻烦而且易错,而 MyBatis 的动态 SQL 可以让我们摆脱这种痛苦,简单而又高效的书写 SQL。 MyBatis 动态 SQL 由 OGNL 表达式和条件标签两部 分组成,我们将会分为多个小节进行介绍。 OGNL 表达式是动态 SQL 的基

  • 字符串 hash list set zset

  • 作为一个长期的SAS用户,我正在探索切换到python和pandas。 然而,在今天运行一些测试时,我很惊讶python在尝试一个128MB的csv文件时内存耗尽。它大约有200,000行和200列,大部分是数字数据。 使用SAS,我可以将csv文件导入SAS数据集,并且它可以和我的硬盘一样大。 中有类似的内容吗? 我经常处理大文件,没有访问分布式计算网络的权限。