在我们的项目开发中,可能有把SQL查询的结果保存到CSV然后提供下载的功能。当查询的结果集相当大的时候,很容易报内存不足错误(outofmemory)。那该怎么解决这种情况的内存不足错误呢?

其实在JAVA的Statement中提供的方法可以解决这个问题。

setMaxRows (int max) : 将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数。

setFetchSize (int rows) :为 JDBC 驱动程序提供一个提示,它提示此 Statement 生成的 ResultSet对象需要更多行时应该从数据库获取的行数。

setFetchDirection (int direction) :向驱动程序提供关于方向的提示,在使用此 Statement 对象创建的 ResultSet 对象中将按该方向处理行。可以设置的参数是ResultSet.FETCH_FORWARDResultSet.FETCH_REVERSE 和 ResultSet.FETCH_UNKNOWN。

setMaxRows方法的话是取得最大行,最大以后的数据会被丢掉。设置这个参数虽然可以避免报内存错误,不过在很多场合没法使用,因为查询的结果肯定想完整的抽取出来的情况很多。这个方法和limit类似。

setFetchSize方法的话是JDBC查询和从结果集里面每次取设置行数,循环去取,直到取完。这个方法很常用的方法。默认是size是0.也就是默认是一次性把结果集的数据全部取出来,这样就容易造成内存不足。这个方法好像在自动提交模式下无效,需设置autocommit为false。

setFetchDirection方法是设置从结果集中取数据的方向,有时候我们想从最后面往前取数据,用这个方法很方便,虽然sort可以实现同样的功能,但这个方法比order by sort更有效率。

JDBC的fetchsize和maxrows的更多相关文章

  1. 聊聊jdbc statement的fetchSize

    在使用MySQL的JDBC时,如果查询结果集过大,使用一次查询,可能会出现Java.lang.OutOfMemoryError: Java heap space问题,因为DB服务器端一次将查询到的结果 ...

  2. Spring JDBC最佳实践(2)

    原文地址:https://my.oschina.net/u/218421/blog/38576 使用DataSourceUtils进行Connection的管理由上节代码可知,JdbcTemplate ...

  3. SpringJDBC解析2-execute方法

    大家都使用过JDBCTEMPLATE的execute方法,execute作为数据库操作的核心入口,将大多数数据库操作相同的步骤统一封装,而将个性化的操作使用参数PreparedStatementCal ...

  4. spring jdbctemplate源码跟踪

    闲着没事,看看源码也是一种乐趣! java操作数据库的基本步骤都是类似的: 1. 建立数据库连接 2. 创建Connection 3. 创建statement或者preparedStateement ...

  5. 关于写的Java书籍进展

    大家好,去年说要写本Java书,近期就快出版了.眼下已经開始打印样书了,最快于本月中旬左右就能够在互动网www.china-pub.com上看到消息,其它各个站点何时会发售要看详细进货情况. 去年我预 ...

  6. pgjdbc源码分析

    一. 源代码目录结构 pgjdbc的源码结构如下图: 那么我们来一一看看各个模块都是做什么的吧. 1 core 该目录是程序的核心模块目录. 这里实现了大部分pgjdbc的基类和接口,例如statem ...

  7. SpringBoot标准Properties

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  8. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

  9. 附录A application.properties配置项

    摘自官网,仅作为参考用 Part X. Appendices # =================================================================== ...

随机推荐

  1. codeforces 691F F. Couple Cover(组合计数)

    题目链接: F. Couple Cover time limit per test 3 seconds memory limit per test 512 megabytes input standa ...

  2. IOS中的沙盒机制

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...

  3. 「LuoguP1145」 约瑟夫(打表

    Description n 个人站成一圈,从某个人开始数数,每次数到 m 的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人, k 个好人站在一起, k 个坏人站在一起.从第一个好 ...

  4. JNI 接口规范

    1. 简介 Java 本地接口概述 背景 JDK 1.0 本地方法接口 Java 运行时接口 原始本地接口和 Java/COM 接口 目标 Java 本地接口方法 利用 JNI 编程 JDK 1.1. ...

  5. css 样式引入的方法 link 与import的区别

    <link> 元素所参考的样式用户可以自由的选择加以改变,而导入的样式表单就自动的与剩下的样式表融合在一起了 CSS与HTML文档结合的4中方法:1 使用<link>元素链接到 ...

  6. (转载) 上传文件进度事件,进度事件(Progress Events)

    转载URL:https://www.w3cmm.com/ajax/progress-events.html MDN参考:https://developer.mozilla.org/zh-CN/docs ...

  7. E20180331-hm

    corresponding adj. 相当的,对应的; 通信的; 符合的,符合; 一致的; implicitly adv. 含蓄地; 暗示地; 无疑问地; 无保留地; causal  adj. 具有因 ...

  8. MySQL与MongoDB的区别

    一.MongoDB简介 什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨 ...

  9. 解决 Xshell 连接出现 The remote SSH server rejected X11 forwarding request 问题

    问题描述 使用 Xshell 5 首次连接虚拟机 CentOS 7.6 出现这样的提示: WARNING! The remote SSH server rejected X11 forwarding ...

  10. 鸟哥私房菜基础篇:vim 程序编辑器习题

    猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0310vi.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-我用 vi 开启某个档案后,要在 ...