mysqlプロトコルの初期化DBコマンドパッケージと解析

2106 ワード

git
https://github.com/sea-boat/mysql-protocol
概況
mysql接続デフォルトのschemaを変更したい場合は、クライアントが初期化DBコマンドパッケージをサービス側に送信できます.
mysql通信メッセージ構造
を選択します.
名前
説明
int<3>
payload長さ
the least significant byte firstに従って格納され、3バイトのpayloadと1バイトのシーケンス番号が新聞ヘッダに結合される
int<1>
シリアル番号
string
payload
新聞体、長さは前に指定したpayloadの長さです
DBコマンドパッケージの初期化
Payload
1              [02] COM_INIT_DB
string[EOF]    schema name

詳細:http://dev.mysql.com/doc/internals/en/com-init-db.html
コマンドパッケージ操作の初期化
  • 初期化コマンドパッケージ
  • /**
     * 
     * @author seaboat
     * @date 2016-09-25
     * @version 1.0
     * 
    email: [email protected]
    *
    blog: http://blog.csdn.net/wangyangzhizhou
    * mysql init db packet.
    */
    public class InitDBPacket extends MySQLPacket {
    public byte[] schema;
    public void read(byte[] data) {
    MySQLMessage mm = new MySQLMessage(data);
    packetLength = mm.readUB3();
    packetId = mm.read();
    mm.read();//skip COM_INIT_DB
    this.schema = mm.readBytes();
    }
    public void write(ByteBuffer buffer) {
    BufferUtil.writeUB3(buffer, calcPacketSize());
    buffer.put(packetId);
    buffer.put(COM_INIT_DB);
    buffer.put(schema);
    }
    @Override
    public int calcPacketSize() {
    int i = 1;
    i += schema.length;
    return i;
    }
    @Override
    protected String getPacketInfo() {
    return "MySQL Init DB Packet";
    }
    }
    ================================================================
    の 「Tomcatカーネルデザイン 」はすでに で されており、 な はhttps://item.jd.com/12185360.html を てる. さん、ありがとうございました.
    なぜ「Tomcatカーネル 」を くのか
    =========================