zoukankan      html  css  js  c++  java
  • 【原创】9. MYSQL++中的Field、FieldNames以及FieldTypes类型

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

    image

    mysqlpp::FieldNames的主要作用就是保存FieldNames,他其实就是一个vector<string>的派生类型。

    主要用在了ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)用于获取Field Names的时候,

    image

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

    image

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

    image

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

    image

    mysqlpp::Field

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

    • 成员变量

    image

    从名字上来说,以上变量的作用已经非常明显了。需要说明的是

    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赋值。

    image

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

    image

    直接通过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。

     

  • 相关阅读:
    【Swift学习】Swift编程之旅---可选链(二十一)
    【Swift学习】Swift编程之旅---ARC(二十)
    Swift 3.0首个开发者预览版将在5月12日释出
    【Swift学习】Swift编程之旅---析构方法(十九)
    【Swift学习】Swift编程之旅---构造方法(十八)
    【Swift学习】Swift编程之旅---继承(十七)
    swift3.0的改变
    【Swift学习】Swift编程之旅---方法(十五)
    【Swift学习】Swift编程之旅---Subscripts下标(十六)
    【Swift学习】Swift编程之旅---属性(十四)
  • 原文地址:https://www.cnblogs.com/aicro/p/3633510.html
Copyright © 2011-2022 走看看