MySQL++ V3.1.0 用户手册
【译者注】该文档用词较为隐晦,译者也非职业翻译,故有些用词不准确,欢迎来邮件提出批评意见。另,转载请注明出处。Word文档将提交到百度文科,请自行下载。
[MySQL++ v3.1.0 用户手册] Kevin Atkinson Sinisa Milivojevic Monty Widenius Warren Young
Copyright ? 1998-2001, 2005-2010 Kevin Atkinson (original author)MySQL ABEducational Technology Resources June 03, 2010
译者:自由骑士笃志 时间:2011-8-5
E-mail: 目录
1.简介 3
1.1. MySQL++历史简要 3 1.2. 如果你有问题 3 2. 概述 3
2.1. 连接对象 4 2.2. 查询对象 4 2.3. 结果表 4 2.4 异常 5 3. 指导 5
3.1. 运行例子 5
3.2. 一个简单的例子 6
3.3. 一个相对复杂一些的例子 7 3.4. 异常 9
3.5. 引用和引号泄露 10
3.6. C++ vs. SQL数据类型 10 3.7. 处理SQL的NULL 11
3.8. MySQL++的特殊的String类型 12 3.9. 处理二进制数据 13 3.10. 使用事务 18
3.11. 使用哪种查询方式? 24
3.12.处理带条件的结果行 25
3.13. 在一个结果表中为每行执行代码 27 3.14. 连接选项 28 3.15. 处理连接超时 31
3.16.一个连接上的并发查询 31 3.17.获取字段源数据 32
1.简介
MySQL++是一个针对MySQL C API的C++封装。它的目的是提供一个类似STL容易一样简单易用的接口,帮助你有效的避免在代码中使用复杂的SQL语句。 MySQL的最新版本可以从MySQL++的官方网页查看。
如果你希望支持MySQL开发工作,可以访问它的邮件列表,邮件列表内有记录开发人员名单,同时告诉你如何进行捐助。
1.1. MySQL++历史简要
MySQL++是1998年Kevin Atkinson创建的。它起步是初于MySQL,但是早期版本的目的是希望设计为数据库无关的,所以早期它被称为SQL++,在早期也曾被称为”sqlplus”。Kevin Atkinson完成了1.0之前的版本。
到了1999年,开始Monty Widenius做了一些对MySQL++的补全工作,完成了1.1,1.2版本,但是后来他去了另外一个MySQL公司。之后Sinisa一直对库进行维护,直到2001年中旬发布了1.7.9版本。此时,他们发现进行数据库无关的开发几乎是不可行的。
也就是这个1.7.9版本之后,MySQL++很久时间没有进行更新,这样持续了三年。期间内Sinira一直对MySQL++邮件列表的用户进行技术解答,有时会发布部分补丁,但是再未正式更新过。
在这个期间内还有个很糟糕的事情,2001年的时候,主流的C++编译器还无法支持标准C++。导致MySQL++使用了许多不标准的构造去适应老的编译器。直到MySQL++开始大量使用模板之后,这更增加了使用者的麻烦,他们在项目中使用MySQL++时会出现各种奇怪的警告和错误。
直到2004年八月,WarrenYoung实在无法忍受了,他将之前的许多零碎补丁整合起来,发布了1.7.10版本,这个版本使用GCC3.3编译后再没有任何警告。从那以后,MySQL++才逐渐的减少它的bug,开始变的有活力了。
1.2. 如果你有问题
如果针对这个库有什么问题,需要邮件咨询别人,我们很希望你可以发送邮件到MySQL++邮件列表。这个邮件列表有存档,或许你可以在里面搜索到别人已经提出同样的问题。 你可能会在MySQL++列表中发现一个私人邮箱,建议不要发送邮件给个人,因为有些开发者已经不再负责MySQL++的开发。
2.概述
MySQL++能够处理复杂的数据库操作,而事实上,它使用起来又比其他的数据库API简单,
它的大致用法如下: 1: 开启连接。 2: 组成执行查询。
3: 如果成功则返回结果。 4: 如果失败则处理错误。
每一步均对应MySQL++的一个类。
2.1. 连接对象
每一个连接对象负责管理一个MySQL服务器的连接。你起码需要一个连接对象进行数据库事务处理。
MySQL支持客户端和服务器有多种不同的数据连接:TCP/IP,Unix domain sockets,Windows命名管道。
MySQL++的普通连接对象 Connection 类可以支持上面的全部连接,只要在 Connection::connect() 时指定不同的参数便可。当然,如果开始你就知道连接种类,可以直接使用子类,例如直接使用 TCPConnection 类。
2.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内。
2.3. 结果表
结果表里的数据都保存在一个类似 std::string 的 String 对象中。这个 String 类中有大量简洁的函数能让你很方便的将其转换为C标准数据类型。另外一些MySQL++内定义的类型,例如 DateTime 类型,你也可以轻松的从MySQL的DATATIME 类型直接初始化,MySQL++会自动的进行转换。转换中如果出现错误,你可以设置一个警告或者抛出一个异常,如何处理这种错误取决于你如何设置本库。
虽然MySQL函数返回结果不同,但整体来说,MySQL++里查询返回类型有以下几个主要类型:
- 无数据返回的查询
并不是所有的SQL查询需要返回数据,例如 CREATE TABLE 。这种类型的查询,将返回
一个特殊的返回值类型:SimpleResult 这个返回值会简单的描述一些查询的信息,例如查询是否成功执行,结果有多少行等。
- 返回MySQL++结构类型的查询
大部分时候,接收一个结果表的方式是使用 Query::store() 函数。这个函数会返回一个 StoreQueryResult 对象,这个对象基于 std::vector
一个简单的执行查询的方式是使用 Query::use() ,它会返回一个 UseQueryResult 对象,这个类类似于一个STL的std::vector 输入迭代。你可以一次性处理结果表里的一行。当你不知道结果表内有多少结果的时候,可以迭代遍历到容器尾。这个特性允许我们获得更好的内存效能,因为查询出来的结果不用保存在RAM中,这对我们获得大容量的结果表时很有意义。
- 返回MySQL标准结构或自定义结构
使用MySQL++的数据结构来提取数据,的确比MySQL C API方便,但是你可以定一些自己的C++结构以承接数据库中的一些自定义数据。这样的话,就需要你在代码里加入一些原生的SQL代码。
如果你要用自己定义的C++结构,可以下面这样做:
vector
query << \query.storein(v);
for (vector
是不是很简单?
如果你不想创建SSQLSes去承接你的表结构,你可以使用MySQL++ v3提供的一种方式,使用 Mysqlpp::Row 去容载。
vector
query << \query.storein(v);
for (vector
这样可以不足够明晰优雅,但也不失为一种方法.
相关推荐: