2021-01-12 20:03
@zzutligang 数据多不会一次性读取,而是分批次读取,批次大小取决于你 mysql 配置的缓冲区
当然,上面讲的偏向于 JDBC 与数据库这一端,如果你的代码这一端一次性读很多数据肯定是会 OOM 的
2021-01-12 15:55
@chcode 简单说就是 ReultSet 并不是一开始就知道共有多少条记录被查出来,那么 isLast() 就需要有 io 操作,强制得到所有数据才能得到 isLast(),这样的话,就算数据量再大也要一次性得到所有数据,性能会拉低
也可能是由于这类原因,不同的数据库对 JDBC 规范的实现有差异,有些干脆不去实现
便如,jfinal 在开发 active record 模块的 generate 模块的时候,获取一些 meta 信息生成 model、baseModel 时,有些数据库行为就是不一样,造成很多麻烦
2021-01-12 15:46
@chcode 不同数据库可能不支持, JDBC 底层的很多东东都不靠谱, 而且针对每条记录都判断一次 isLast(), 这个对性能肯定是有影响的,而且大概率影响很大
因为 ResultSet 中的数据不是一次性从数据库读出来的,是不断有 io 操作的