如何通过java获取sql结果长度

问题描述 投票:0回答:1

我需要使用 thread exec Hive SQLs 或 MySQL SQLs。

但是不知道sql结果大小。昨天,有人执行了一个像

这样的 sql
select column1 from table1 where id = 1

column1 返回 250M+ 结果,导致内存泄漏。

那么,有没有什么方法可以在获取SQL结果集之前先确定它的大小

能否获取sql连接socket fd,并统计这个链接的数据量?

java sql out-of-memory resultset
1个回答
0
投票

单独设置 fetchSize 可能不足以让 MySQL 驱动程序开始从数据库流式传输数据,而不是一次加载所有内容。你可以试试

stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 结果集.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);

还有两个选择

  1. 使用 row_number 函数和 limit 读取块中的数据

var a = SELECT count(*) FROM table1 var i= a/100000

当我>0

从 ( SELECT Column1, row_number() over(order by Column1) rwn FROM Table1 )T1 其中 rwn 在 i 和 100000*i 之间 我=我-1

选项 2 将结果存储到临时表或 csv 文件中并使用临时表或 csv 文件

© www.soinside.com 2019 - 2024. All rights reserved.