jdbc 大数据量下载
程序员文章站
2022-03-06 18:34:46
...
1.背景:
常见数据应用里面会有数据下载功能,当数据量比较大的时候,用JDBC 不对参数处理,容易OOM
2.原因:
基本的Connetion 做查询,ResultSet 会将数据全部拉到内存再进行遍历,所以容易OOM
3.当我们查询的时候利用
PreparedStatement ps = connection.prepareStatement(sqlText,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); // 拉到多少就行处理 ps.setFetchSize(1); // ResultSet.TYPE_FORWARD_ONLY,1003 1004 1005 // TYPE_FORWARD_ONLY一般是默认,不同数据库有差异。具体解释自己网上看 // 用的pg数数据库,关闭自动提交才会生效 connection.setAutoCommit(false);
4.关于配合spring+ibatis:
// SqlSessionFactory 里面有 SqlSession openSession(boolean autoCommit); // 实际实现: // SpringManagedTransactionFactory @Override public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) { return new SpringManagedTransaction(dataSource); } // 发现并没有使用到autoCommit // 因此手动设置了才生效,这里其实不太明白,为啥这里只用2个参数 // ibatis 版本,1.3.2 spring-cloud 2.0 SqlSession sqlSession = sqlSessionFactory.openSession() sqlSession.getConnection().setAutoCommit(false);
5.不同的数据库、版本之间有差异,要再看看,多测试一下
6. 小结:
1. 历史经验不一定可靠,得自己测试才知道
2.仅仅简单记录一下,有问题可以留言指出
上一篇: ant的远程发布
下一篇: access数据库jdbc连接
推荐阅读
-
Socket+JDBC+IO实现Java文件上传下载器DEMO详解
-
通过JDBC连接oracle数据库的十大技巧
-
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
-
显卡神器GPU-Z新版发布:识别一大波新卡(附下载地址)
-
Win8.1/Win10平板Surface 3大型固件下载更新了哪些内容?
-
Win10三大累积更新KB3213986/KB3210721/KB3210720补丁下载 附更新内容
-
Win8.1/Win10平板Surface 3大型固件下载更新了哪些内容?
-
可以下载软件的软件有哪些(十大安卓应用商店排名)
-
可以下载软件的软件有哪些(十大安卓应用商店排名)
-
Win10三大累积更新KB3213986/KB3210721/KB3210720补丁下载 附更新内容