最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql协议的ResultsetRow包及解析

来源:懂视网 责编:小采 时间:2020-11-09 09:09:20
文档

mysql协议的ResultsetRow包及解析

mysql协议的ResultsetRow包及解析:githttps://github.com/sea-boat/mysql-protocol概况ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录。mysql通信报文结构类型名字描述int<3>payload长度按照the least significant
推荐度:
导读mysql协议的ResultsetRow包及解析:githttps://github.com/sea-boat/mysql-protocol概况ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录。mysql通信报文结构类型名字描述int<3>payload长度按照the least significant

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包

Payload

if(NULL){ 0xfb}else{
 Protocol::LengthEncodedString}

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

ResultsetRow包类

/**
 * 
 * <pre><b>resultset row packet.</b></pre>
 * @author 
 * <pre>seaboat</pre>
 * <pre><b>email: </b>849586227@qq.com</pre>
 * <pre><b>blog: </b>http://www.gxlcms.com/;/pre>
 * @version 1.0
 * @see http://www.gxlcms.com/
 */public class ResultsetRowPacket extends MySQLPacket {
 private static final byte NULL_MARK = (byte) 251; 
 public int columnCount; 
 public List<byte[]> 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";
 }

}

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

mysql协议的ResultsetRow包及解析

mysql协议的ResultsetRow包及解析:githttps://github.com/sea-boat/mysql-protocol概况ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录。mysql通信报文结构类型名字描述int<3>payload长度按照the least significant
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top