暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase数据库缺省情况下,ResultSets 被完整地取回并存储在内存中

三金先生 2023-11-09
71

缺省情况下,ResultSets 被完整地取回并存储在内存中。在大多数情况下, 这是操作起来最有效的方式,而且由于 GBase 网络协议的设计这也更容易实现。 如果用户使用着拥有大量行或大数据的 ResultSets,而且无法在 JVM 内为所需 内存分配大量空间,可以通知驱动以“流”方式返回结果,一次一行。为了使 这个功能可用,用户需要按如下方式创建一个语句实例:

 stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, 

 java.sql.ResultSet.CONCUR_READ_ONLY); 

 stmt.setFetchSize(Integer.MIN_VALUE); 

 这是个向前只读结果集,它读取得容量以整数为单位。MIN_VALUE 指示驱动 程序以逐行操作的方式形成“流”结果输出。

 此后,任何用这个语句创建的结果集都按行检索。  

使用这种方法有些要注意的地方,用户必须在当前连接上使用任何查询之 前,读出结果集中所有的行(或者关闭它),否则就是会抛出异常。 

 这些语句持有的锁(在 GsDB 存储引擎中,无论它们是 GsSYS 表级锁还是行 级锁),最早可以在语句完成的时候释放。

 如果这个语句在一个事务的范围内,那么这些锁在事务结束时(这意味着 那条语句需要先完成)释放。和大多数其它数据库一样,语句不会完成直到所 有依赖于该语句的结果被读取或对于这个语句活跃的结果被关闭。

 因此,当使用“流”结果时,如果用户想对那些被这个语句引用并产生结 果集的表保持并发访问,应当尽快地处理它们。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论