锁定老帖子 主题: 关于jdbc的一种功能的实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-28
有个fetch size,可以指定每次读取多少
|
|
返回顶楼 | |
发表时间:2012-02-28
对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。 所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。 |
|
返回顶楼 | |
发表时间:2012-02-28
本质还数据库是分页查询,只是前台展示方式不同
|
|
返回顶楼 | |
发表时间:2012-02-28
lvjun106 写道 对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。 所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。 对,如果没有设置fetch_size,其实每次next只取一条,fetch_size相当于缓冲的作用 |
|
返回顶楼 | |
发表时间:2012-02-28
用流!我记得以前见过类似的代码的,但忘记怎么写了。思路是:查询后得到一个输出流,循环读一段然后flush;写到文件。
|
|
返回顶楼 | |
发表时间:2012-02-28
可以在result的遍历里面,调用一个方法,自动判断是否遍历到最后了,到最后了,自动去读取新的数据。类似于分页,但是不手动干预操作。直到读取完所有需要的数据。
|
|
返回顶楼 | |
发表时间:2012-02-28
lvjun106 写道 对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。 所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。 fetchSize并不是针对某个表来说,而是针对每一个sql。每一个sql的背后都是一个隐含的游标 |
|
返回顶楼 | |
发表时间:2012-02-28
xiaoZ5919 写道 lvjun106 写道 对于一张表的查询。指定fetch_size即可。
之前我们项目中的报表的数据是由N多张表联合查询出来,所以即使指定取一定数量的记录,还是慢。 所以我们把数据进行异步存储到一个临时表中,而页面取数据则是从临时表中按指定数量取。 fetchSize并不是针对某个表来说,而是针对每一个sql。每一个sql的背后都是一个隐含的游标 没错。。确实不是针对表,而是针对SQL。 但我的意思是说。SQL 只涉及到一张表的查询,而对于本身SQL查询就消耗蛮多时间,而且结果记录很多才采取临时表的方案。 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2012-02-29
分批处理是否可行,比如每次取1w条记录出来
|
|
返回顶楼 | |