zoukankan      html  css  js  c++  java
  • JDBC的fetchsize和maxrows

    在我们的项目开发中,可能有把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更有效率。

  • 相关阅读:
    10003 Cutting Sticks(区间dp)
    Cocos2d-x init() 和 onEnter() 区别
    HDU1181【有向图的传递闭包】
    空间参考系统与WKT解析
    面试经典-分金条
    uvalive 3971
    lua学习:使用Lua处理游戏数据
    面试经典--两个房间 每间房间三盏灯
    浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
    顺序队列之C++实现
  • 原文地址:https://www.cnblogs.com/firstdream/p/7834857.html
Copyright © 2011-2022 走看看