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类型的更多相关文章

  1. 【原创】Mysql中select的正确姿势

    引言 大家在开发中,还有很多童鞋在写查询语句的时候,习惯写下面这种不规范sql select * from table 而不写成下面的这种规范方式 select col1,col2,...,coln ...

  2. 【原创】Mysql中事务ACID实现原理

    引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isol ...

  3. mysql中char,varchar与text类型的区别和选用

    关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... 于是去查阅了一 ...

  4. mysql中的sql-mode导致的datetime类型字段不能为0000

    问题描述: 在执行建表语句的时候,出现invalid default datetime value '0000-00-00 00:00:00',从字面意思看,就是不合法的默认值'0000-00-00 ...

  5. mysql中char,varchar与text类型的区别

      关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... text  ...

  6. 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 ...

  7. MySQL中 指定字段排序函数field()的用法

    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4……),str与str1,str ...

  8. 【原创】MYSQL++源码剖析——前言与目录

    终于完成了! 从第一次想写到现在真的写好大概花了我3个月时间.原来一直读人家的系列文章,总感慨作者的用心良苦和无私奉献,自己在心里总是会觉得有那么些冲动也来写一个. 最开始的麻烦是犹豫该选哪个主题.其 ...

  9. 存储引擎和表的操作(mysql中的数据类型、完整性约束)

    一.存储引擎 .概念 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. 通过选择不同的技术 ...

随机推荐

  1. 利用selenium webdriver点击alert提示框

    在进行元素定位时常常遇到这样的alert框: 那么该如何定位并点击确定或取消按钮呢?stackoverflow上找到了这个问题的答案. OK, Show you the code: driver.fi ...

  2. Drools7.0.0.Final Unsupported major.minor version 52.0异常

    异常信息 在使用Drools7.0.0.Final版本进行开发过程中,出现以下异常: java.lang.UnsupportedClassVersionError: org/kie/api/KieSe ...

  3. Leetcode 1015. Smallest Integer Divisible by K

    思路显然是暴力枚举. 但是两个问题: 1.当1的位数非常大时,模运算很费时间,会超时. 其实每次不用完全用'11111...'来%K,上一次的余数*10+1后再%K就行. 证明: 令f(n)=1111 ...

  4. windows 下多线程

    unsigned uiThread2ID; HANDLE handle = (HANDLE)_beginthreadex(NULL, , ThreadUploadFun, NULL, CREATE_S ...

  5. (十)java条件结构

    条件结构 if(条件表达式) {}: if(条件表达式){} else {}; if(条件表达式){} else if(条件表达式) {} else if(条件表达式){} ...... else{} ...

  6. Linux系统中的wc

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  7. logistic 回归Matlab代码

    function a alpha = 0.0001; [m,n] = size(q1x); max_iters = 500; X = [ones(size(q1x,1),1), q1x]; % app ...

  8. 解决get方法传递URL参数中文乱码问题

    [转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下, ...

  9. html页面中如何设置当光标移到一个固定区域时其形状变成手型,移出时恢复

    在除了IE6的情况下,可以通过CSS的:hover伪类来实现: 假如你想设定的固定区域为:<div id="test"></div>,那么只需要在CSS样式 ...

  10. 选择第n大的数(分治法和排列实现)

    个人心得:在买的书上看到的一个经典分治题,题目意思就是给定一个数组,求第k小的数. 第一反应就是排序,然后返回第k-1位置的数就可以了,这样算法的复杂度是nlongn,在快速排序的基础下还是挺不错的. ...