游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。
结果集按照配置分为以下三种:
常规结果集:一次获取到所有的结果,执行速度最快但容易引发 OOM
。
流式结果:不一次性读取全部的数据,而是一行一行从 Socket 中读取数据。statement.setFetchSize(Integer.MIN_VALUE)
就可以使用流式结果集。流式结果集执行速度快,但是一旦开始读取就无法停止,而且容易造成网络问题。
游标结果集:需要 COM_STMT_FETCH
支持且需要开启 PS(即设置 useServerPrepStmts=true
)。设置语法为 useCursorFetch=true
,还需要指定 fetchSize
。游标结果集执行速度慢,并且要求 ODP V1.8.5 及 OBServer V2.2.75 以上版本。
游标结果集(useCursorFetch
)的使用方法如下:
建立链接,设置参数 useCursorFetch
和 useServerPrepStmts
。
String url = "jdbc:mysql://host:port/test?useServerPrepStmts=false&useCursorFetch=true"conn = DriverManager.getConnection(url,"admin@mysql", "admin");
生成 Prepare 语句。
PreparedStatement pstmt = conn.prepareStatement("select * from tab",ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
设置 fetchsize
。
pstmt.setFetchSize(3);
执行语句。
ResultSet rs = pstmt.executeQuery();
循环获取下一行数据。
while (rs.next()) {}
备案信息: 粤ICP备15087711号-2
Copyright © 2008-2024 啊嘎哇在线工具箱 All Rights.
本站所有资料来源于网络,版权归原作者所有,仅作学习交流使用,如不慎侵犯了您的权利,请联系我们。