mysql的fetchsize设置多大

mysql的fetchsize设置多大,第1张

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)

1 读取 *** 作开始遇到的问题是当sql查询数据量比较大时候基本读不出来。开始以为是server端处理太慢。但是在控制台是可以立即返回数据的。于是在应用

这边抓包,发现也是发送sql后立即有数据返回。但是执行ResultSet的next方法确实阻塞的。查文档翻代码原来mysql驱动默认的行为是需要把整个结果全部读取到

内存中才开始允许应用读取结果。显然与期望的行为不一致,期望的行为是流的方式读取,当结果从myql服务端返回后立即还是读取处理。这样应用就不需要大量内存

来存储这个结果集。正确的流式读取方式代码示例:

PreparedStatement ps = connection.prepareStatement("select .. from ..",

ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

//forward only read only也是mysql 驱动的默认值,所以不指定也是可以的 比如: PreparedStatement ps = connection.prepareStatement("select .. from ..")

ps.setFetchSize(Integer.MIN_VALUE)//也可以修改jdbc url通过defaultFetchSize参数来设置,这样默认所以的返回结果都是通过流方式读取.

ResultSet rs = ps.executeQuery()

while (rs.next()) {

System.out.println(rs.getString("fieldName"))

}

getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制。可以用setFetchSize()来设置,而getFetchSize()是用来读出那个设置值。设置为正整数之后,ResultSet每次抓取的最多纪录数就有了上限,而不是所有符合条件的记录。

如果你是想获得符合条件的记录数目,最少有3种方法

1.

count=0

while(resultSet.next()){

count++

}

2.

resultSet.last();

count=resultSet.getRow()

3.

如楼上所述

String sql = "select count(*) totalCount from gonglue"

count=rs.getInt("totalCount")


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5893950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-06
下一篇 2023-03-06

发表评论

登录后才能评论

评论列表(0条)

保存