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拎过去,就可以用了。

原创粉丝点击