论坛首页 Java企业应用论坛

关于jdbc的一种功能的实现

浏览 19575 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-28  
有个fetch size,可以指定每次读取多少
0 请登录后投票
   发表时间:2012-02-28  
对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。
所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。
0 请登录后投票
   发表时间:2012-02-28  
本质还数据库是分页查询,只是前台展示方式不同
0 请登录后投票
   发表时间:2012-02-28  
lvjun106 写道
对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。
所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。

对,如果没有设置fetch_size,其实每次next只取一条,fetch_size相当于缓冲的作用
0 请登录后投票
   发表时间:2012-02-28  
用流!我记得以前见过类似的代码的,但忘记怎么写了。思路是:查询后得到一个输出流,循环读一段然后flush;写到文件。
0 请登录后投票
   发表时间:2012-02-28  
可以在result的遍历里面,调用一个方法,自动判断是否遍历到最后了,到最后了,自动去读取新的数据。类似于分页,但是不手动干预操作。直到读取完所有需要的数据。
0 请登录后投票
   发表时间:2012-02-28  
lvjun106 写道
对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。
所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。


fetchSize并不是针对某个表来说,而是针对每一个sql。每一个sql的背后都是一个隐含的游标
0 请登录后投票
   发表时间:2012-02-28  
xiaoZ5919 写道
lvjun106 写道
对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。
所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。


fetchSize并不是针对某个表来说,而是针对每一个sql。每一个sql的背后都是一个隐含的游标


没错。。确实不是针对表,而是针对SQL。
但我的意思是说。SQL 只涉及到一张表的查询,而对于本身SQL查询就消耗蛮多时间,而且结果记录很多才采取临时表的方案。
0 请登录后投票
   发表时间:2012-02-29  
xiaoZ5919 写道
xiaoZ5919 写道
jdbc有一个fetch_size 意思是每次从游标中取多少,oracle支持该参数,mysql不支持。这样每次加载指定的数目到内存中,而不是所有的 解决了内存消耗的问题

按照我的理解 JDBC本身就有这么一个功能,Statement里有一个setFetchSize方法就是用来做这个,不过这得看数据库支持不支持该参数,我看过mysql的驱动是不支持的 oracle支持

/**
     * Gives the JDBC driver a hint as to the number of rows that should
     * be fetched from the database when more rows are needed for
     * <code>ResultSet</code> objects genrated by this <code>Statement</code>.
     * If the value specified is zero, then the hint is ignored.
     * The default value is zero.
     *
     * @param rows the number of rows to fetch
     * @exception SQLException if a database access error occurs,
     * this method is called on a closed <code>Statement</code> or the
     *        condition  <code>rows >= 0</code> is not satisfied.
     * @since 1.2
     * @see #getFetchSize
     */
    void setFetchSize(int rows) throws SQLException;


+1
1 请登录后投票
   发表时间:2012-02-29  
分批处理是否可行,比如每次取1w条记录出来
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics