全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

jdbc的resultset底层实现原理是怎样的?

来源:千锋教育
发布人:xqq
2023-10-10

推荐

在线提问>>

一、jdbc的resultset底层实现原理是怎样的

只了解 mysql, mysql 中的 result 默认会把所有结果拿回来。默认情况下,结果集完全检索并存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于MySQL网络协议的设计,更容易实现。

如果您正在使用具有大量行或较大值的结果集,并且无法在 JVM 中为所需的内存分配堆空间,则可以告诉驱动程序一次将结果流式传输回一行。

所以所以如果应用不想一次拿那么多,可以

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);

stmt.setFetchSize(Integer.MIN_VALUE);

setFetchSize一个非MIN_VALUE在一般情况下是没啥用的, 但如果设置了 MIN_VALUE 之后 jdbc 代码中会用一个 streamingResult 的方式一条条从 server 的连接拿,当然这个文档中也提到了用这种方式的一些 caveats。

最后,除了使用 MIN_VALUE, 还可以使用 useCursorFetch=true(同时需要 prepare? ),之后 setFetchSize 就能生效了,不过和上面的区别是: 前面是 mysql 一次吐全部数据推给客户端,客户端一条条收然后收的慢通过 tcp backpressure; 后者用 cursor 是 mysql 不返回全部结果,而是客户端根据 setFetchSize(或 defaultFetchSize) 多次用 从 mysql 拉取指定条数据。

延伸阅读:

二、Navicat是什么

Navicat是一套快速、可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本。Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL、MariaDB、SQL Server、Oracle、PostgreSQL和SQLite的数据。

Navicat提供一个直观和设计完善的用户界面,用于创建、修改和管理资料库的所有对象,例如表、视图、函数或过程、索引、触发器和序列。我们的表设计器帮助用户创建和修改数据库的表,让设置高级选项,如关系、限制、触发器和更多。

使用Navicat浏览和修改数据,插入、编辑、删除数据或复制和粘贴记录到数据表形式的数据编辑器,Navicat将运行相应的命令(例如INSERT或UPDATE),免除写复杂的SQL。广泛的数据编辑工具令编辑工作更为方便,例如外键查找、set/enum选择器和记录筛选。

相关文章

分布式数据库与集中式数据库的主要区别是什么?

数据仓库中,什么是business key?

为什么数据库不能通过不断的添加服务器节点来实现扩展?

数据库和数据库管理系统、数据库系统是什么关系?

jdbc的resultset底层实现原理是怎样的?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取