【原创】9. MYSQL++中的Field、FieldNames以及FieldTypes类型
mysqlpp::Field其实使用的并不多,主要在于Result.h中ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)的几个获取下一个field的方法(全部定义在了ResultBase中),主要如下

mysqlpp::FieldNames的主要作用就是保存FieldNames,他其实就是一个vector<string>的派生类型。
主要用在了ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)用于获取Field Names的时候,

以及mysqlpp::Row中用于SSLQS的equal_list和field_list(这两个方法主要用于产生equal list)

mysqlpp::FieldTypes用的地方主要在于ResultBase中的types_,他派生自vector<mysql_type_info>

这个types_主要是用在了获取结果集中指定index的列的属性。

mysqlpp::Field
该类型主要被定义在了field.h中。作者说,这是一个对于MYSQL_FIELD类型的不完全包装,主要cut down的是对于一些不太实用的member的访问,同时,在这里,作者也极力避免使用MYSQL C API中所定义的一系列的表示类型的C常量,而是使用mysqlpp::mysql_type_info等进行替代。
- 成员变量

从名字上来说,以上变量的作用已经非常明显了。需要说明的是
1. flags_,他其实就是为了用于表示该Field是否是part of a primary key(primary_key ( )),是否有default value(no_default( ))等特殊属性。
2. max_length_ 是当前结果集中的数据中该列最大的长度。
- 成员方法
其实mysqlpp:: Field类型的成员方法没有太多好讲的,主要就是构造方法。其实也非常简单,就是将MYSQL_FIELD的一些成员属性(请参看http://www.sdau.edu.cn/support/mysq_doc/manual_Clients.html)有针对性的给mysqlpp:: Field赋值。

最后有一个问题,什么时候构造这个Field的呢?通过上面的分析,我们知道,如果需要获取一个Field,那么久需要在ResultBase的fields_成员变量中获得。所以只需要关心fields_成员变量是如何生成的。

直接通过DBDriver的fetch_field方法进行获取到一个MYSQL_FIELD*,然后直接就仍改了fields_(fields_是一个Fields类型,他是一个typedef std::vector<Field>)。顺便说一下,DBDriver::fetch_field( )其实就是封装了mysql_fetch_field(或者视传入的参数而调用mysql_fetch_field_direct)这个MYSQL C API。
【原创】9. MYSQL++中的Field、FieldNames以及FieldTypes类型的更多相关文章
- 【原创】Mysql中select的正确姿势
引言 大家在开发中,还有很多童鞋在写查询语句的时候,习惯写下面这种不规范sql select * from table 而不写成下面的这种规范方式 select col1,col2,...,coln ...
- 【原创】Mysql中事务ACID实现原理
引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isol ...
- mysql中char,varchar与text类型的区别和选用
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... 于是去查阅了一 ...
- mysql中的sql-mode导致的datetime类型字段不能为0000
问题描述: 在执行建表语句的时候,出现invalid default datetime value '0000-00-00 00:00:00',从字面意思看,就是不合法的默认值'0000-00-00 ...
- mysql中char,varchar与text类型的区别
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... text ...
- MySQL中DATETIME、DATE和TIMESTAMP类型的区别
一.TIMESTAMP 显示格式:YYYY-MM-DD HH:MM:SS 时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59'] TIMESTAMP D ...
- MySQL中 指定字段排序函数field()的用法
MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4……),str与str1,str ...
- 【原创】MYSQL++源码剖析——前言与目录
终于完成了! 从第一次想写到现在真的写好大概花了我3个月时间.原来一直读人家的系列文章,总感慨作者的用心良苦和无私奉献,自己在心里总是会觉得有那么些冲动也来写一个. 最开始的麻烦是犹豫该选哪个主题.其 ...
- 存储引擎和表的操作(mysql中的数据类型、完整性约束)
一.存储引擎 .概念 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. 通过选择不同的技术 ...
随机推荐
- ViewPager实现图片轮翻效果
很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的.今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的 ...
- 旧书重温:0day2【11】第6章 狙击windows的异常处理
昨晚经过一番努力,又把第六章的内容温习了一遍! 随手,做了一个实验!狙击windows的异常处理, 顺便也把过程记录了下来!省事!(有图) 今早,论坛一直无法打开! 就推迟到了现在! 哈哈 正题: 第 ...
- 使用vscode书写博客
很早就开始使用过vscode了,不过在已经成熟的sublime的碾压下,vscode一直没有成为我的首选,今天为了更好的博客书写体验,我直接放弃了sublime,因为 sublime对中文支持不好,而 ...
- 暴力破解Windows RDP(3389)
RDP是远程桌面协议. $ nmap your_target Starting Nmap 7.01 ( https://nmap.org ) at 2016-09-20 17:29 CST Nmap ...
- ubuntu 添加新硬盘
查看硬盘: # fdisk -l ... Disk /dev/sdb: 274.9 GB, 274877906944 bytes 255 heads, 63 sectors/track, 33418 ...
- shfileoperation 删除文件 FileDelete(CString strName)
From:http://blog.csdn.net/lvwx369/article/details/41440883 注意:其中namePath 为全局变量 Cstring namePath; BOO ...
- bzoj 2282 消防
Written with StackEdit. Description 某个国家有\(n\)个城市,这\(n\)个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为\(z_i(z_i ...
- 解决Maven报Plugin execution not covered by lifecycle configuration问题
问题: 在eclipse neon 中引入maven项目时,弹出两个错误,一个是jacco-maven-plugin,一个是项目中的插件ota-schema-plugin 如果忽略这两个错误,点击fi ...
- BZOJ2084:[POI2010]Antisymmetry
浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html 题目传送门:https://lydsy.com/JudgeOnline/pro ...
- RelativeLayout里的gravity不能居中的解决方法
最近在遇到RelativeLayout里的gravity属性给它复制center_horizontal或者center都不能居中它的子组件,后来找到了替代方法,只要在它的每个子组件里加上android ...