首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次具有固定结果数的流MySql ResultSet

一次具有固定结果数的流MySql ResultSet
EN

Stack Overflow用户
提问于 2014-07-10 12:05:02
回答 2查看 4.9K关注 0票数 4

我有1600万条记录的MySql表,因为一些迁移工作,我正在读取整个Mysql表。

以下代码用于在MySql中对大型MySql进行流处理

代码语言:javascript
复制
        statement = connection.createStatement(
                java.sql.ResultSet.TYPE_FORWARD_ONLY,
                java.sql.ResultSet.CONCUR_READ_ONLY);
        statement.setFetchSize(Integer.MIN_VALUE);

但这是一次一个结果的流,这是否意味着我们正在访问每一行的MySql服务器?

在使用流时,我们可以设置类似于这个statement.setFetchSize(1000)的东西;

我希望在流大型ResultSet的同时减少到服务器的往返次数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-10 13:04:23

我假设您使用的是官方的MySQL提供的/J。

您正在显式地告诉JDBC (和MySQL)用statement.setFetchSize(Integer.MIN_VALUE);逐行地流结果。

来自MYSQL文档

默认情况下,ResultSets被完全检索并存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于MySQL网络协议的设计更容易实现。如果您正在使用具有大量行或大值的ResultSets,并且无法在JVM中为所需内存分配堆空间,则可以告诉驱动程序一次将结果流回一行。 要启用此功能,需要以下列方式创建语句实例: conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY);stmt.setFetchSize(Integer.MIN_VALUE); 前向只读结果集与取取大小Integer.MIN_VALUE的组合可作为驱动程序逐行流结果集的信号。在此之后,将逐行检索使用该语句创建的任何结果集。

Integer.MIN_VALUE以外的任何用于获取大小的值都会被MySQL忽略,并应用标准行为。整个结果集将由JDBC驱动程序获取。

或者不使用setFetchSize(),所以JDBC驱动程序将使用默认值(0),或者显式地将值设置为0。使用0的值还将确保JDBC不使用MySQL游标,这可能会根据MySQL和Connector/J版本和配置而发生。

票数 3
EN

Stack Overflow用户

发布于 2020-07-24 01:21:11

要一次用固定数量的记录(例如,1000批记录)而不是使用MySQL JDBC驱动程序的记录流来获取记录,您需要这样做:

  1. 在JDBC中将useCursorFetch设置为true,将defaultFetchSize设置为所需的批处理大小。 jdbc:mysql://localhost/?useCursorFetch=true&defaultFetchSize=1000
  2. 根据JDBC中的useCursorFetch驱动程序文档,在JDBC中将MySQL设置为true,然后在创建语句后调用setFetchSize(1000)。见下面的代码: conn = DriverManager.getConnection("jdbc:mysql://localhost/?useCursorFetch=true","user","s3cr3t");stmt = conn.createStatement();stmt.setFetchSize(1000);rs = stmt.executeQuery("SELECT * FROM your_table_here");

有关更多信息,请参见正式文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-implementation-notes.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24676111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档