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

如何使用Spring MySQL和RowCallbackHandler管理大型数据集

督德明
2023-03-14
问题内容

我正在尝试使用Spring和JdbcTemplate遍历MySQL中表的每一行。如果我没记错的话,它应该很简单:

JdbcTemplate template = new JdbcTemplate(datasource);
template.setFetchSize(1);
// template.setFetchSize(Integer.MIN_VALUE) does not work either            
template.query("SELECT * FROM cdr", new RowCallbackHandler() {
  public void processRow(ResultSet rs) throws SQLException {
    System.out.println(rs.getString("src"));
  }
});

我收到一个OutOfMemoryError,因为它试图读取整个内容。有任何想法吗?


问题答案:

Statement#setFetchSize()
javadoc中已经指出:

向JDBC驱动程序 提示 应从数据库中获取的行数

驱动程序实际上可以自由地应用或忽略提示。一些驱动程序忽略它,一些驱动程序直接应用它,一些驱动程序需要更多参数。MySQL
JDBC驱动程序属于最后一类。如果查看MySQL
JDBC驱动程序文档
,将看到以下信息(向下滚动约2/3,直到标题 ResultSet 为止):

要启用此功能,您需要按以下方式创建一个Statement实例

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,

java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

请阅读文档的 整个 部分,它也描述了这种方法的注意事项。

为了使其在Spring中工作,您需要使用自定义实现扩展/覆盖JdbcTemplate。由于我不从事Spring工作,因此无法对此进行详细介绍,但是现在您至少知道要看的地方了。

祝好运。



 类似资料:
  • 在所有媒体都转型,人人都做自媒体的时代,新榜(NEWRANK.CN),作为新媒体以及整个内容生态圈最大,最专业的服务平台,在这个风口上持续服务着无数顶尖的内容创作者。新榜有着非常大量的数据收集工作,他们从一开始便选择使用互联网表单工具处理着各项需求,在对比多个工具之后,金数据成为他们最可靠的数据收集工具。 用表单做社群管理 为了更好服务于内容创业者,新榜建立了 30 个多个微信社群,并且每个社群都

  • 我正在尝试用H2O(3.14)训练机器学习模型。我的数据集大小是4Gb,我的计算机RAM是2Gb,带有2G交换,JDK 1.8。参考本文,H2O可以使用2Gb RAM处理大型数据集。 关于大数据和GC的说明:当Java堆太满时,我们会进行用户模式的磁盘交换,即,您使用的大数据比物理DRAM多。我们不会因GC死亡螺旋而死亡,但我们会降级到核心外的速度。我们将以磁盘允许的速度运行。我个人测试过将12G

  • 问题内容: 我有10,000个地址和5,000人的大型数据库。 我想让用户在数据库中搜索地址或用户。在输入文本时,我想使用Twitter的提前提示功能来建议结果。 在此处查看NBA示例:http : //twitter.github.io/typeahead.js/examples。 我了解从速度和负载的角度来看,预取15,000个项目并不是最佳选择。尝试实现此目标的更好方法是什么? 问题答案:

  • 数据模型管理 概述 模型相关名称解释 模型查询 模型预跑 模型发布 模型同步 模型生产环境管理 数据模型管理 更新时间:2018-01-31 16:30:32 概述 在为开发者提供的数据开发工具中,数据模型管理用于提供大数据计算服务,帮助开发者实现对实时数据秒级别的计算,同时为帮助实现大量历史数据分析和挖掘,提供离线数据周期性统计计算服务,且以可视化操作的功能来减低开发成本,使得开发者能够简单快速

  • 问题内容: 我正在寻找一种数学解决方案,该解决方案可以处理真实(长,大,大,风暴)数字。我还没有发现任何东西,但是我不想现在这个问题还没有解决。我正在寻找一种简单的Number解决方案,例如MicrosoftExcelPrecision(30位十进制)或BigInteger(Java)解决方案。当然是用Java语言编写的。 问题答案: BigInt现在是Firefox和Chrome的一部分; 你不

  • 我正在处理非常大的文件,并使用Spring集成来处理它们。我想知道使用Spring集成和提供的DSL处理这些问题的最佳和最有效的方法是什么。我有一个测试CSV文件,它有大约30K条记录,我正在使用filespliter组件将每一行读入内存,然后根据分隔符再次拆分,以获得我需要的列。 下面的代码段。