C++操作MySQL
来源:互联网 发布:开票软件默认密码 编辑:程序博客网 时间:2024/06/17 22:03
C++操作MySQL
简介
1)成果是一个用于操作MySQL的类;
2)它基于MySQL提供的C api进行处理;
3)它的优点,是简单易用,且不用额外考虑内存管理问题;
4)这里提供了代码,包括makefile和vs2015工程;
相关内容
1)相关的MySQL接口的简单介绍;
2)DBConnector和ResultSet的介绍;
一、MySQL的C api简介
除了C的api,我们还可以找到C++版的MySQL++和Connctor C++。它们可以看作是对MySQL接口的封装形式。这一点,与我们是一致的。
相比它们,这里的工作有一个优点,就是更为简洁。在保证基本功能可用的前提下,我们提供更少的接口。换言之,它的使用门槛更低。这将在下一节进行介绍。
言归正传,mysql提供的C接口较多,但这里只介绍用到的这些。
1.1 这里用到的接口,有下面这些:
mysql_init // 初始化连接结构mysql_close // 关闭连接mysql_real_connect // 建立连接mysql_real_query // 执行sql语句mysql_store_result // 获取结果集mysql_errno // 获取错误码mysql_error // 获取错误信息mysql_free_result // 释放结果集mysql_fetch_row // 获取结果集下一行
我们可以看到,这些api已经包含了最常用的功能。我们要做的就是对它们进行整理。
1.2 另一方面,这里用到的MySQL提供的结构体有MYSQL,MYSQL_RES,MYSQL_ROW,MYSQL_FIELD。从名字可以大致看出,它们分别表示数据库连接,结果集,结果集中的某一行,以及结果集中的某个字段。
这些结构体的声明,我们可以在mysql.h中找到。而mysql.h则在mysql官网提供的MySQL Connector C中。当然,如果是ubuntu,则可以在安装了libmysqlclient-dev了之后,在/usr/include/mysql/mysql.h中查看。
二、DBConnector和ResultSet
在这里,将MySQL的接口封装为DBConnector类,并将结果集封装为Result类,再使用shared_ptr对其进行管理,即ResultSet。
下面,先简单介绍Result和ResultSet之间的关系,然后直接用使用步骤介绍DBConnector和ResultSet的使用方法。
相比Result类,我们建议使用ResultSet。事实上,它们之间的关系如下:
typedef shared_ptr<Result> ResultSet;
为了ResultSet可以完全替代Result,考虑shared_ptr可能包含空对象的情况,这里对Result的IsEmpty()做特殊处理,如下:
bool Result::IsEmpty(){ // 我们可以尝试一下: 当shared_ptr包含的对象为NULL时,调用对象的成员函数会发生什么 return (this==NULL || m_res == NULL);}
下面展示使用步骤。总共为四或三个步骤。我们可以看到,建立连接后,马上就可以进行增删改查。而且,在使用的过程中,不需要动用指针。
2.1 定义DBConnector对象
DBConnector dbconn(host, user, passwd, dbname, port);
2.2 初始化dbconn(即建立连接)
dbconn.Initialize()
2.3 查询,并获取结果集
string sql = "SELECT * FROM BOOK";ResultSet res(dbconn.Query(sql));
2.4 从结果集中逐行取数据
while (res->FetchOne()){ cout << " ID: " << res->GetInt("id") << endl; cout << "NAME: " << res->GetStr("NAME") << endl; cout << "SIZE: " << res->GetDouble("SIZE") << endl;}
如果是进行增/删/改,则可以在2.1和2.2步骤之后,调用Update接口,像这样:
bool ret = dbconn.Update("insert into BOOK(id,name,size) values(1,'A',5.1)");
从上面的步骤,可以看到DBConnector包含Initialize, Query, Update接口。此外,还有两个接口,即GetErrno和GetErrMsg。
ResultSet则包含了IsEmpty,GetRowCount,FetchOne,GetStr,GetInt,GetDouble。
具体代码在https://github.com/Jiacheng03/DBConnector
在安装了MySQL Connector C(windows)或者libmysqlclient-dev(linux)的前提下,只要把src目录中的DBConnector.h和DBConnector.cpp拎过去,就可以用了。
- mysql c操作函数
- 用C操作MySQL
- C操作mysql
- C语言操作Mysql
- c语言操作mysql
- C操作MYSQL
- c语言操作mysql
- C操作mysql
- C语言操作MYSQL
- C操作MYSQL数据库
- c语言操作mysql
- C语言操作MySql
- mysql c语言操作
- C语言操作MYSQL
- c语言操作mysql
- c语言操作mysql
- C对 MYSQL操作
- C语言操作mysql
- 几种常见DRL(深度强化学习)方法总结与对比之前提基本概念
- 重写和重载的区别
- tensorflow.cast参数及功能
- Fuzzing简介以及使用AFL对LibTIFF进行模糊测试
- rails官方指南--建一个简易博客
- C++操作MySQL
- Java中怎么把科学计数法显示出全部数字
- CTS测试框架 -- V1版本
- 希尔排序
- java热部署与热加载,以及配置tomcat实现热部署的方式
- 渣渣四级
- 最新gitlab在CentOs7.3中的安装
- 调用winform添加音乐或图片
- leetcode 524. Longest Word in Dictionary through Deleting 子序列的确定