博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tars源码漫谈第20篇------tc_mysql.h/tc_mysql.cpp(mysql API的封装)
阅读量:4141 次
发布时间:2019-05-25

本文共 2471 字,大约阅读时间需要 8 分钟。

      tc_mysql类主要实现对mysql.h(mysql的官方API)中操作的封装.

 

      TC_DBConf是一个db相关的配置类, 唯一函数是:

void loadFromMap(const map
&mpParam) { map
mpTmp = mpParam; _host = mpTmp["dbhost"]; _user = mpTmp["dbuser"]; _password = mpTmp["dbpass"]; _database = mpTmp["dbname"]; _charset = mpTmp["charset"]; _port = atoi(mpTmp["dbport"].c_str()); _flag = 0; if(mpTmp["dbport"] == "") { _port = 3306; } }

      可见, 要先获取map,  这是通过TC_Config的getDomainMap来实现的, easy.

 

      看下TC_Mysql的构造函数, 有:

_pstMql = mysql_init(NULL);

      实际上就是创建了一个MYSQL类的对象, 可以理解为一个“广义socket”.

 

      mysql_options相当于对_pstMql这个“广义socket”设置属性。

      mysql_real_connect相当于在_pstMql这个“广义socket”建立连接。

      mysql_close相当于关闭_pstMql这个“广义socket”.

 

      如下是为了防止sql注入攻击:

string TC_Mysql::escapeString(const string& sFrom){    if(!_bConnected)    {        connect();    }    string sTo;    string::size_type iLen = sFrom.length() * 2 + 1;    char *pTo = (char *)malloc(iLen);    memset(pTo, 0x00, iLen);        mysql_real_escape_string(_pstMql, pTo, sFrom.c_str(), sFrom.length());    sTo = pTo;    free(pTo);    return sTo;}

       至于buildInsertSQL, buildReplaceSQL, buildUpdateSQL并没有什么大用, 还不用自己去写这些sql语句, 出错了也好查。而getVariables, 也没啥大用。

       最重要的还是execute, queryRecord,相当于对"广义socket"进行操作。

 

       而随后的:

updateRecord, insertRecord, replaceRecord, deleteRecord, getRecordCount, getSqlCount, getMaxValue, existRecord, lastInsertID,getAffectedRows

       也仅仅是对基本mysql操作的封装, 实际中并无大用, 我还是觉得自己写mysql语句好, 然后execute或者queryRecord.

       

       如下的MysqlRecord和MysqlData是类中类, 是很重要的数据:

/**     *  @brief mysql的一条记录     */    class MysqlRecord    {    public:        /**         * @brief 构造函数.         *           * @param record         */        MysqlRecord(const map
&record); /** * @brief 获取数据,s一般是指数据表的某个字段名 * @param s 要获取的字段 * @return 符合查询条件的记录的s字段名 */ const string& operator[](const string &s); protected: const map
&_record; }; /** * @brief 查询出来的mysql数据 */ class MysqlData { public: /** * @brief 所有数据. * * @return vector
>& */ vector
>& data(); /** * 数据的记录条数 * * @return size_t */ size_t size(); /** * @brief 获取某一条记录. * * @param i 要获取第几条记录 * @return MysqlRecord类型的数据,可以根据字段获取相关信息, */ MysqlRecord operator[](size_t i); protected: vector
> _data; };

 

        总之, TC_Mysql就是对mysql API的封装, 方便使用, 别无其他。

 

        也确实很方便。

 

 

 

 

       

 

转载地址:http://ogwti.baihongyu.com/

你可能感兴趣的文章
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
JAVA数据类型
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>