从select查询返回结果时,ResultSet是否将所有行存储在内存中?或者它只获取有限数量的行?数据库与数据库有什么不同?MYSQL的行为是什么?
默认情况下,MySQL JDBC 驱动程序尝试获取 Java 内存中的所有内容。因此,如果您正在处理非常多的行和/或很少的内存,那么您需要告诉它不要这样做。这在其 JDBC 驱动程序文档中有详细描述。这是相关性的摘录:
结果集
默认情况下,ResultSet 被完全检索并存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于 MySQL 网络协议的设计更容易实现。如果您正在使用具有大量行或大值的 ResultSet,并且无法在 JVM 中为所需内存分配堆空间,则可以告诉驱动程序一次将结果流回一行。
要启用此功能,您需要按以下方式创建 Statement 实例:
Run Code Online (Sandbox Code Playgroud)stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);只进、只读结果集与提取大小的组合
Integer.MIN_VALUE用作驱动程序逐行流式传输结果集的信号。在此之后,将逐行检索使用该语句创建的任何结果集。这种方法有一些注意事项。您必须先读取结果集中的所有行(或关闭它),然后才能对连接发出任何其他查询,否则将引发异常。
对于其他数据库(阅读:其他 JDBC 驱动程序),您必须查阅其文档。
| 归档时间: |
|
| 查看次数: |
2288 次 |
| 最近记录: |