【原创】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中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. 通过选择不同的技术 ...
随机推荐
- tf随笔-1
生成新的计算图,并完成常量初始化,在新的计算 图中完成加法计算 import tensorflow as tf g1=tf.Graph() with g1.as_default(): value=[1 ...
- Django应用部署
前言 Apachewsgi 环境搭建 安装Apache 安装mod_wsgi 添加djangowsgi文件 配置etcapache2httpdconf wsgipy配置 跑起来吧 uWSGI 环境搭建 ...
- css3: scrollLeft,scrollWidth,clientWidth,offsetWidth 的区别
(需要提一下:CSS中的margin属性,与clientWidth.offsetWidth.clientHeight.offsetHeight均无关) offsetwidth:是元素相对父元素的偏移宽 ...
- bulkcopy实现批量插入与更新
public static void UpdateData<T>(List<T> list, string TabelName) { DataTable dt = new Da ...
- 重温CLR(五)类型和成员基础
类型的各种成员 类型可以定义以下种类的成员 1 常量 常量是指出数据值恒定不变的符号.这种符号使代码更易阅读和维护.常量总与类型管理,不与类型的实例管理.常量逻辑上总是静态成员. 2 字段 字段表示只 ...
- 《DSP using MATLAB》示例Example7.18
代码: M = 33; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; T1 = 0.1095; T2 = 0.598; Hrs = [zeros(1,11) ...
- 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)
题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: // ...
- LA2218 Triathlon
题意 PDF 分析 设出长度\(x,y,1-x-y\),就是关于它们的二元一次不等式,判断有没有解. 可以用半平面交来解决. x/V[i]+y/U[i]+(1-x-y)/W[i] < x/V[j ...
- java代码确认出ip和主机名
总结::不懂... package com.aa; import java.net.*; public class InetAddresTest { public static void main(S ...
- pt工具之pt-archiver
# tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...