makefile mysql_c++ 操作MySQL

@[toc]

一、源代码说明

本文介绍的是ccfree框架中采用connection和sqlstatement类操作MySQL数据库。

类的声明文件是ccfree/db/mysql/_mysql.h。

类的定义文件是ccfree/db/mysql/_mysql.cpp。

示例程序位于ccfree/db/mysql目录中。

编译规则文件是ccfree/db/mysql/makefile。

二、概述

本文不会介绍MySQL数据库、SQL语言和C/C++的基础知识,您应该是一个职业的C/C++程序员,在阅读本文之前,您已经掌握了MySQL数据库和SQL语言的基础知识。

ccfree框架把MySQL提供的库函数封装成了connection和sqlstatement类,采用封装后的类操作MySQL数据库,代码简洁优雅,性能卓越。

接下来我先列出connection和sqlstatement类的声明,然后通过流程图和示例程序介绍它位的用法。

三、connection类

MySQL数据库连接connection类的声明(程序员不必关心的私有成员和数据结构未列出):

// MySQL数据库连接池类。

四、sqlstatement类

MySQL数据库的SQL语句操作sqlstatement类的声明(程序员不必关心的私有成员和数据结构未列出):

// 操作SQL语句类。

五、程序流程

ccfree框架把对MySQL数据库操作的SQL语句分为两种:有结果集的SQL语句和无结果集的SQL语句。

如果SQL语句被执行后,有结果集的产生,称为有结果集的SQL,即数据查询语言DQL,以select关键字,各种简单查询,连接查询等都属于DQL。

如果SQL语句被执行后,没有结果集的产生,称为无结果集的SQL,包括数据定义语言DDL(主要是create、drop和alter)和数据操纵语言DML(insert、update和insert)。

也可以这么说,查询的SQL语句会产生结果集,其它的SQL语句不会产生结果集。

1、无结果集SQL的程序的流程

227959bf1629ac578c8f82b59374cbfe.png

这是一个完程的流程,在实际开发中,如果是执行简单的SQL语句,第6步和第7步可能不需要,如果SQL语句只执行一次,第7步和第8步之间的循环也不需要。

2、有结果集SQL的程序的流程

158c5e8bf1bcedafb64303edf3ea2dd2.png

这是一个完程的流程,在实际开发中,如果是执行简单的查询语句,第6步、第7步和第8步可能不需要,如果结果集中最多只有一条记录,第10步和第11步之间的循环也不需要。

六、示例程序

1、创建超女信息表

示例(createtable.cpp)

/*

运行效果

89a1348b4f37baeaf76a12fe125b2607.png

2、向超女表中插入5条记录

示例(inserttable.cpp)

/*

运行效果

7628d88b43b871c8b9cc2d556493d1f7.png

3、更新超女表中的记录

示例(updatetable.cpp)

/*

运行效果

565574c99248a7aab69ccedbf3ca7717.png

4、查询超女表中的记录

示例(selecttable.cpp)

/*

运行效果

2f486cd8feba3b99125924fc026382dc.png

5、查询超女表中的记录数

示例(counttable.cpp)

/*

运行效果

aa335771ece728d0c27b0195bf23937f.png

7、删除超女表中的记录

示例(deletetable.cpp)

/*

运行效果

2a1f9ed130c0a1f16294c91c54e7e5f0.png

8、与Oracle的兼容性处理

在封装sqlstatement类的时候,为了与Oracle兼容,做了以下方面的处理:

1)在MySQL中,绑定输入和输出变量采用的是"?",Oracle采用的是":n"(n表示变量的序号),在sqlstatement的prepare方法中,把":n"替换成了"?"。

2)在MySQL中,字符串与日期的转换函数是str_to_date和date_format,Oracle的转换函数是to_date和to_char,在sqlstatement的prepare方法中,把to_date替换成str_to_date,把to_char替换成date_format。

3)MySQL有时间格式是"%Y-%m-%d %h:%i:%s",Oracle数据库是"yyyy-mm-dd hh24:mi:ss",在sqlstatement的prepare方法中,把"yyyy-mm-dd hh24:mi:ss"替换成"%Y-%m-%d %h:%i:%s"。目前,只对"%Y-%m-%d %h:%i:%s"和"%Y%m%d%h%i%s"两个格式做了替换,如果需要对更多的格式做替换,请修改sqlstatement的prepare方法中的源代码。

4)MySQL的sqlstatement类绑定输入或输出变量的最大数量缺省是256,在"_mysql.h"头文件中定义了MAXPARAMS宏,您可以根据实际需求修改它。

// 执行SQL语句前绑定输入或输出变量个数的最大值,256是很大的了,可以根据实际情况调整。

9、longtext和longblob字段的操作

MySQL提供的库函数支持对longtext和longblob字段的操作,本人的技术水平有限,找不到这方面的资料和示例程序,所以还没有封装对longtext和longblob字段的操作,希望各位能提供技术帮助,通过C语言技术网与我联系,我们共同完善ccfree框架,非常感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值