jdbc 大数据量下载_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > jdbc 大数据量下载

jdbc 大数据量下载

 2020/3/31 12:32:31  greemranqq  程序员俱乐部  我要评论(0)
  • 摘要:1.背景:常见数据应用里面会有数据下载功能,当数据量比较大的时候,用JDBC不错参数处理,容易OOM2.原因:基本的Connetion做查询,ResultSet会将数据全部拉到内存再进行遍历,所以容易OOM3.当我们查询的时候利用PreparedStatementps=connection.prepareStatement(sqlText,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);//拉到多少就行处理ps
  • 标签:下载 数据

1.背景:

? ? ? ? ? 常见数据应用里面会有数据下载功能,当数据量比较大的时候,用JDBC 不错参数处理,容易OOM

?

2.原因:

? ? ? ? ? 基本的Connetion 做查询,ResultSet 会将数据全部拉到内存再进行遍历,所以容易OOM

?

3.当我们查询的时候利用

? ?

class="java" name="code">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.仅仅简单记录一下,有问题可以留言指出

发表评论
用户名: 匿名