- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《4.MYSQL之SQLTypeAdapter类型、SQLQueryParms类型与SQLBuffer
4. MYSQL++ 之 SQLTypeAdapter类型、SQLQueryParms类型 与 SQLBuffer???1. mysqlpp::SQLBuffer该类型其实就是SQLTypeAdapter传入的各种类型(int, string, double, long, String, …) 的包装,包装的结果就是各种类型实例的字符串表示 ( const char* data_;? )length 长度 ( size_type length_ )类型(由mysqlpp::mysql_type_info定义) (?mysql_type_info?type_ )是否是数据库的NULL类型 ( bool is_null_ )表示类型的类别是 mysql_type_info ,该类型是一个“C++类型”和“SQL 类型”相互映射的utility class。需要强调的是,该类型实际上是支持BINARY存法的,其实在实现上,就是将length不设定为”\0”的位置,而是整个类型实例的真实长度。以下面的代码为例SQLBuffer(abc\\0efg, 7, mysql_type_info::string_type, false)如此一来,上面的四个属性就非常清楚地对号入座了。?同时,该类型回答了传入的类型的各种问题,例如传入实例是否是个string(is_string( ) )传入实例是否是null(is_null( ), 这里的null是数据库中的NULL,即如create table (id int not?NULL),必须要区别于字符串“NULL”)传入实例的实例类型是什么(type( ))传入实例的实例是否需要转移escape(escape_q( ))传入实例的实例是否需要quote(quote_q( ))关于类型信息(type( ), escape_q( ), quote_q( ))都是靠着mysqlpp::mysql_type_info实现。除了在进行quote_q( )的时候,在调用mysql_type_info::quote_q( )之前,先检查如果包装的是一个在TIMESTAMP中的“NOW()”的情况,如果是这种情况,那么就是不需要进行quote。例如,CREATE TABLE tbl1 ( time TIMESTAMP);insert into tbl1 values( NOW() ); --注意这里的NOW()是不需要加上引号的?具体的实现代码是?也就是说当前版本的MYSQL++能够识别的MYSQL函数应该只有NOW( )了。其他的都会被认为是普通字符串而被加上quote。?2. mysqlpp::mysql_type_info这个类型是mysqlpp:: SQLBuffer的灵魂,具体表示类型信息,该类型是一个“C++类型”和“SQL 类型”相互映射的utility class。它是唯一一个需要和MYSQL 原生态的数据结构打交道的,需要硬编码的类型(具体指的是mysql_type_info内部的一个mysql_ti_sql_type_info类型的数组,其中包含了诸如名字、底层类型、MYSQL_Comm.h中的对应的ENUM以及表示是否可以为SQL null、是否是默认类型等信息的flag),它的功能就是在SQL类型和C++类型之间进行相互转换。也就是说,该类型明确了某个C++类型所对应的SQL类型。具体的内容,可以参看抓们解释mysql_type_info类型原理这一节。?3. mysqlpp::SQLTypeAdapter作用SQLTypeAdapter正如名字所言,是一个“适配器”,也就是说,为了在实现上的方便,很多函数就以他作为中介,来隐藏具体的数据类型(例如int,double,string和mysqlpp::String等)。类似于Query中的use和store等,都有使用SQLTypeAdapter作为参数的方法。使用SQLTypeAdapter就可以省去很多overwrite。?文档上是这样说的This class provides implicit conversion between many C++ types and SQL-formatted string representations of that data without losing important type information.第一种用法是在template query中,例如在下面的用法中,可以防止execute的签名过于复杂。例如下面的execute只需要声明两个SQLTypeAdapter即可,而不需要声明为一个string,一个int(其实这样的组合是无穷尽的,所以也只有这一种解决途径)。这个用法是
文档评论(0)