mysql驱动协议_实现自己的数据库驱动——MySQL协议Result Set包解析(六)

2ff34e647e2e3cdfd8dca593e17d9b0a.png

前言

上一篇中当执行了INSERT、UPDATE or ALTER TABLE操作时,会生成对应的OK/Error包。而我们这篇要说明的是SELECT结果Result Set的解析。Result Set会涉及到了多个不同结构的包,有Column_Count、Column_Def、EOF、Row。

Result Set包简析

用一张图片来简单解析一下每个包的具体作用。

3.png

从上图来看,客户端发送一个select的com_query包之后,DB会按照下列步骤返回:1.返回一个 Protocol::LengthEncodedInteger ,其中数据为column_count.(该表的显示返回中字段的个数)

2.接下来会跟column_count个Protocol::ColumnDefinition 包(对每一个字段的说明).

3.再读取一个eof包表示ColumnDefinition包流结束.

4.读取n个Row包,Row含有请求的数据值。

6.如果读到任何一个error包之后,从此读取结束,抛出错误.

7.或者你读取到了第二个eof包,按照正常顺序这里就会结束了. 但是:

如果eof包中的status & SERVER_MORE_RESULT_EXISTS不为0,表明还有ResultSet,则返回到步骤1,开始读取下一个ResultSet.

Column_count Packet

该包前四个字节表示的包的字节长度以及包的序列号。后面存放的是一个类型为LengthEncodeInteger表示结果中含有几个列。Number of fields显示该返回字段有2列。

4.png

Column_def Packet

该包前四个字节表示的包的字节长度以及包的序列号。后四字节为以下内容。相对包内容的位置长度(字节)名称描述0不定长catalog目录,通常为def

不定长不定长schema操作的数据库

不定长不定长table操作的虚拟表名

不定长不定长org_table操作的物理表名

不定长不定长name虚拟列字段名

不定长不定长org_name物理列字段名

不定长0x0clength of fixed-length fields以下字段长度

不定长2character列字符集

不定长4length字段最大长度

不定长1type字段类型

不定长2flags标志

不定长1decimals??

不定长2预留字节数预留字节数

以下是Wireshark对column_def的解析截图。

5.png

EOF Packet相对包内容的位置长度(字节)名称描述01包头标识0xFE 代表这是一个EOF 包

12警告数上次命令引起的警告数

32服务器状态服务器状态

以下是Wireshark的数据截图。

6.png

Row Packet

Row Data含着的是我们需要获取的数据,一个Result Set包里面包含着多个Row Data结构。每一个值前面有长度字节值,可以帮助我们区分开不同的列。相对包内容的位置长度(字节)名称描述0不定length这个字段的数据长度

不定不定value这个字段的值

Wireshark显示Row的数据,虽然只显示了text,但是点击十六进制的数据,还是能看到length的数据。

7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值