mysql resultset_mysql 协议的ResultsetRow包及解析

git

https://github.com/sea-boat/mysql-protocol

概况

ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录。

mysql通信报文结构类型名字描述int<3>payload长度按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头

int<1>序列号

stringpayload报文体,长度即为前面指定的payload长度

ResultsetRow包

Payloadif(NULL){ 0xfb}else{

Protocol::LengthEncodedString}

更多详情 : http://dev.mysql.com/doc/internals/en/com-query-response.html#text-resultset

ResultsetRow包类/**

*

*

resultset row packet.

* @author

*

seaboat

*

email: 849586227@qq.com

*

blog: http://www.php.cn/;/pre>

* @version 1.0

* @see http://www.php.cn/

*/public class ResultsetRowPacket extends MySQLPacket {

private static final byte NULL_MARK = (byte) 251;

public int columnCount;

public List columnValues;

public ResultsetRowPacket() {

}

public ResultsetRowPacket(int columnCount) {

this.columnCount = columnCount;

}

@Override

public void read(byte[] data) {

MySQLMessage mm = new MySQLMessage(data);

packetLength = mm.readUB3();

packetId = mm.read();

for (int i = 0; i < columnCount; i++) {

columnValues.add(mm.readBytesWithLength());

}

} @Override

public void write(ByteBuffer buffer) {

BufferUtil.writeUB3(buffer, calcPacketSize());

buffer.put(packetId);

for (int i = 0; i < columnCount; i++) {

byte[] fv = columnValues.get(i);

if (fv == null) {

buffer.put(NULL_MARK);

} else {

BufferUtil.writeLength(buffer, fv.length);

buffer.put(fv);

}

}

} @Override

public int calcPacketSize() {

int size = 0;

for (int i = 0; i < columnCount; i++) {

byte[] v = columnValues.get(i);

size += (v == null || v.length == 0) ? 1 : BufferUtil.getLength(v);

} return size;

} @Override

protected String getPacketInfo() {

return "MySQL Resultset Row Packet";

}

}

以上就是mysql 协议的ResultsetRow包及解析的内容,更多相关内容请关注PHP中文网(www.php.cn)!

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值