dbassist 是一个 C 语言封装了 MySQL 预处理的框架,包括 MySQL 预处理表单的 CRUD 和多表的联合查询以及多表的嵌套查询。
MySQL 预处理的优点在于
1.安全性高.预处理变量用占位符?表示,与sql语句是分别传递给服务器,安全性相对比较高.
2.占用流量低.在sql语句已经发送的情况下,只要发送绑定变量的不同值即可.
然而mysql预处理也有一个很大的缺点,就是大量变量绑定的代码,可读性极差,冗余重复代码很多.
我们思考预处理如何做到扬长避短,将冗余代码不放在mysql预处理封装的代码中,而是放在结构体初始化的文件中.这样在结构体初始化的繁琐要好过预处理时的繁琐.
然而结构体的成员变量如何与预处理的bind关联呢?
答案无非是数组.输入数组关联预处理的绑定参数,输出数组关联预处理的绑定结果.
数组的数据来源是结构体,结构体如何将成员变量交接给数组呢?
于是我们冥思苦想发现这个预处理的封装是系统性的工程.需要借助第三方的一些代码完成任务.比如想要把结构体成员对象存取,最好的办法不外乎是hashmap,对输出结果的返回最通用的结构体不外乎是json.因此需要引入hashmap和json.
这样还需要设计一个场景,存取结构体成员,于是我们想到了数据表的crud通用操作.接下来就是设计各个crud的函数用hashmap存取结构体变量.大致流程如此.
这样花费了一些时间,完成了一个轻量级c语言操作mysql预处理的框架,除封装了预处理变量绑定的代码,还封装了crud等sql语句的拼接代码,实现单表的crud,以及多表的联合查询以及嵌套查询功能.
代码参考开源仓库
https://gitee.com/solider12/lazy-cats-code-warehouse/blob/master/dbassist
评论