【学习记录】Mysql++

来源:互联网 发布:数据库服务器ico图标 编辑:程序博客网 时间:2024/05/17 23:40

什么是Mysql++

“Mysql++是官方发布的、一个为MySQL设计的C++语言的API,这个API的作用是使工作更加简单且容易。
Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并为C++开发程序员提供象操作STL容器一样方便的操作数据库的一套机制。”——
《mysql++用户手册》

官方介绍

既然官方说明是更简单的操作,那看一下这一套API是如何是用的。

———————————下文引自Mysql++用户手册—————————————————
它的大致用法如下: 
1: 开启连接。 
2: 组成执行查询。
3: 如果成功则返回结果。
4: 如果失败则处理错误。
 每一步均对应MySQL++的一个类。

1.连接对象  

每一个连接对象负责管理一个MySQL服务器的连接。你起码需要一个连接对象进行数据库事务处理。 
MySQL支持客户端和服务器有多种不同的数据连接:TCP/IP,Unix domain sockets,Windows命名管道。 
MySQL++的普通连接对象 Connection 类可以支持上面的全部连接,只要在 Connection::connect() 时指定不同的参数便可。当然,如果开始你就知道连接种类,可以直接使用子类,例如直接使用 TCPConnection 类。

2.查询对象  

通常你可以使用 Connection 类对象创建一个SQL查询对象。 
Query 查询对象使用方式类似一个C++输出流,所以你可以像使用 std::out 或者 std::ostringstream 一样写入数据。这就是MySQL++创建一个查询字符串时最类似C++的方法。这个库做了文件流处理,这样你可以很容易的创建出正确的SQL语句。
Query 查询对象还支持一个特性,我们称之为模板查询(Template Queries),它用起来就类似C的 printf() 函数。你可以用一些符号标志插入的变量部分。如果你要进行大量相似的查询,可以创建一个模板查询,然后更换其中的变量即可。 
第三种创建 Query 查询对象的方式是使用SSQLS。这个特性允许你创建一个C++结构,你同样可以进行INSERT,REPLACE,UPDATE操作,同样也可以生成 SELECT * FROM TableName 的查询,最终将查询的结果保存在一个类似STL容器的SSQLSecs内。

3.结果表  

结果表里的数据都保存在一个类似 std::string 的 String 对象中。这个 String 类中有大量简洁的函数能让你很方便的将其转换为C标准数据类型。另外一些MySQL++内定义的类型,例如 DateTime 类型,你也可以轻松的从MySQL的DATATIME 类型直接初始化,MySQL++会自动的进行转换。转换中如果出现错误,你可以设置一个警告或者抛出一个异常,如何处理这种错误取决于你如何设置本库。 
虽然MySQL函数返回结果不同,但整体来说,MySQL++里查询返回类型有以下几个主要类型:
a)无数据返回的查询  
并不是所有的SQL查询需要返回数据,例如 CREATE TABLE 。这种类型的查询,将返回一个特殊的返回值类型:SimpleResult 这个返回值会简单的描述一些查询的信息,例如查询是否成功执行,结果有多少行等。
b)返回MySQL++结构类型的查询  
大部分时候,接收一个结果表的方式是使用 Query::store() 函数。这个函数会返回一个 StoreQueryResult 对象,这个对象基于 std::vector<mysqlpp::Row>,它是一个对Rows做了随机的存储的容器。每一个 mysqlpp::Row 里保存了一个 std::vector 的 String 对象,每一个 String 对象都是一个数据结果。所以,你可以将 StoreQueryResult 看做一个二维数组。例如,你想获取第5列第2行的数据,你可以这样写 result[1][4] ,你同样可以使用元素单元名进行访问,例如,result[2][“priceKey”]; 。 
 一个简单的执行查询的方式是使用 Query::use() ,它会返回一个 UseQueryResult 对象,这个类类似于一个STL的std::vector 输入迭代。你可以一次性处理结果表里的一行。当你不知道结果表内有多少结果的时候,可以迭代遍历到容器尾。这个特性允许我们获得更好的内存效能,因为查询出来的结果不用保存在RAM中,这对我们获得大容量的结果表时很有意义。
c)返回MySQL标准结构或自定义结构  
使用MySQL++的数据结构来提取数据,的确比MySQL C API方便,但是你可以定一些自己的C++结构以承接数据库中的一些自定义数据。这样的话,就需要你在代码里加入一些原生的SQL代码。

——————————————基础用法的用户手册引用结束——————————————————

我的理解

对数据库的基本操作有两个类,分别是Conn连接类和Query请求类。

Conn.Connect(db,host,user,passwd,port)函数:建立连接。
Query.Query(sql)函数:执行查询。
Query.Execute(sql)函数:执行sql,一般为插入和修改。
Query.FetchNext()函数:从查询后的结果集中取一条记录。
Conn.ReleaseConnection()函数:释放连接。

之前看导师代码的时候,看到他把这方法自己又封装了一次,更加简洁。现在我用的是导师的那个版本,用起来很舒服。

参考文档
Mysql++用户手册
0 0
原创粉丝点击