基于MySQL网络协议实现自己的数据库驱动

2,350 阅读2分钟

很多时候我们并不清楚程序是如何和数据库进行交互的,比如简单的查询命令,程序是如何从MySQL中获取的呢?这个就是我这篇博客的主题。

实现上主要是利用Wireshark解析MySQL的packet,使用Socket实现通信。具体实现思路可以点击下方的个人博客查看 。代码上传至GitHub

在实现功能,借鉴了 sea-boat的packet实现,在其基础上进行功能块的编写,如查询功能可以看下面列子

package com.jiagu.mysql.CURD;

/**
 * Created by jintx on 2018/11/1.
 */
public class QueryTest {

    public static void main(String args[]) throws Exception{
        Query query = new Query();
        String host = "192.168.43.97";//数据库ip地址
        int port = 3306;//端口号
        String user = "root";//用户名
        String password = "tdlab401";//密码
        String dataBase = "data";//操作的数据库名
        String sqlStr = "SELECT name,author FROM `paper` limit 0,2;";//查询语句
        query.query(host,port,user,password,dataBase,sqlStr);//输出结果
    }

}

结果:

一种基于混沌的敏感数据加密算法,司德成,

水下无线电能传输和信号接口系统设计和分析,周世鹏,

实现自己的数据库驱动——MySQL网络协议(一)

实现自己的数据库驱动——WireShark分析MySQL网络协议中的数据包(二)

实现自己的数据库驱动——MySQL协议Handshake解析(三)

实现自己的数据库驱动——MySQL协议Auth Packet解析(四)

实现自己的数据库驱动——MySQL协议OK/Error包解析(五)

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

实现自己的数据库驱动——MySQL协议Quit包解析(七)

实现自己的数据库驱动——字节位运算细节(八)

实现自己的数据库驱动——Packet的read(九)

实现自己的数据库驱动——Packet的write(十)