如何获得SQL结果长度的java



我需要使用线程执行Hive sql或MySQL sql。

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

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

和column1返回一个250M+的结果,这会导致内存泄漏。

那么,在获取SQL结果集之前,是否有方法可以确定它的大小呢?

我可以得到sql连接套接字fd,并计算这个链接上的数据量吗?

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

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

还有两个选项

  1. 使用row_number函数并限制读取块中的数据

var a = SELECT count(*) FROM表1Var i= a/100000

而i> 0

SELECT column from ()SELECT Column1, row_number() over(order by Column1) rwn FROM Table1)T1 where rwn between i and 100000*i我张=

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