摘要:
1. 综述终于来到了SSQLS( Specialized SQL Structure),照我看来这是一个很类似于Hibernate的功能。也就是说,通过SSQLS可以将一张表完全对应到一个C++结构体中,然后只要对于这个结构体进行操作,同时再加入到对应的mysqlpp:: Query对应的方法中,我们就可以执行对应的SQL语句。值得说一下的是,该功能在实际项目中还是相当有用的,但是笔者所在公司由于其业务的特殊性,通常来说表的结构会非常非常大(有一些表居然有近200个字段)。根据作者的manual,MYSQL++默认只支持不超过25个字段的表结构,但是可以通过在编译前调整一些参数来修改这个限制。 阅读全文
摘要:
1. 什么是Template Query在我们实际的编程过程中,我们很容易碰到printf这类需要在运行时来决定到底打印出什么的函数,例如printf(“hello %s”, sth);在这个例子中,那个%s占位符表明了我们以后希望打印的内容格式和位置。同样,在我们书写SQL语句的时候,也会出现这样的情况,例如SELECT * from tbl1 WHERE id = ???我们很有可能在代码中会根据用户的输入来决定如何写入这个???。一种解决办法是,我们在程序中自己记录除了???直往外的内容,然后每次拼接出这句SQL。另一种办法就是使用MYSQL++的Template Query功能。说到底 阅读全文
摘要:
1. 综述其实一看到这两个单词的时候我有点莫名其妙,可能英语没有学好,我的理解就是quoting是“引用”的意思,而Escaping是“逃脱”的意思。后来在看到了作者的TUTORIAL之后才大致明白了两者的意思。QUOTING大白话就是为SQL语句打上单引号。考虑如下的情况SELECT * FROM stock WHERE item = 'Hotdog Buns'由于中间有一个空格,所以这个单引号必不可少。ESCAPING大白话就是转义。例如在C的printf中,为了打出引号(“),我们需要使用”\””的方式。在SQL语句中,这种情况仍然存在,下文节选自MYSQL C API中 阅读全文
摘要:
1. 综述DbDriver只是对于MYSQL C API的一个非常简单的封装,作者原句是This class does as little as possible to adapt between its public interface and the interface required by the underlying C API. 作为MYSQL++的使用者我们不应该直接去创建这个类型,而应该默认让mysqlpp:: Connection来来创建和管理,如果实在是需要,可以通过mysqlpp:: Connection::driver( )来获取底层的DbDriver类型。作者想把这个 阅读全文
摘要:
mysqlpp::Field其实使用的并不多,主要在于Result.h中ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)的几个获取下一个field的方法(全部定义在了ResultBase中),主要如下mysqlpp::FieldNames的主要作用就是保存FieldNames,他其实就是一个vector的派生类型。主要用在了ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)用于获取Field Names的时候,以及mysqlpp::Row中用于SSLQS的equal_list和field_ 阅读全文
摘要:
一、mysqlpp::Row类型在之前的介绍中我们看到了如何通过mysqlpp::Query找到各种Result类型,然后又仔细分析了各种Result类型又是如何生成对应的Row类型(如下所示)。接下去的问题就是,到底mysqlpp::Row是什么。1. Row类型的使用(先不提SSQLS)还是先来看如何使用这个Row类型,照样是通过sample程序。mysqlpp::Connection conn(false);conn.connect(...);mysqlpp::Query query = conn.query("select * from stock");mysqlp 阅读全文
摘要:
在本节中,我将首先介绍MYSQL++中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释。1. MYSQL++的查询实例下面的两个例子分别是STORE(所有数据一次性从服务器拉到本地缓存)和USE(将数据一条一条从服务器拉到本地)的使用方式,其中STORE内部实质就是mysql_store( ),而USE实质就是调用了mysql_use( )。说明,下面的例子虽然使用的都是最为基本的查询过程(即没有使用template sql或者SSQLS),但是这个并不影响我们的讨论,因为遍历结果集的过程是一致的。STO 阅读全文
摘要:
这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措。我的感觉是Null类型通常出现在SSQLS和template Query中比较多。1. 什么是SQL语法中的NULL(以后简称SQL NULL,区别于C++ NULL)我们可以像下面这样创建一张表CREATE TABLE tbl1 ( id INT NOT NULL, name CHAR(20) , time TIMESTAMP NULL );在MYSQL中,上述语句的创建出来的表的列的情况是(dbvisua... 阅读全文
摘要:
该类型是SQLBuffer的灵魂,它用来表示从SQL TYPE到C++ TYPE的相互转变。该类型被定义在type_info.h中。在这个头文件中,其实定义了三个类型,其中前两个都是在mysql_type_info中所使用的utility类型。1. mysql_ti_sql_type_info该类型其实更多地保存mapping信息的数据结构,其核心的成员变量是const char* sql_name_; // SQL类型的字符串描述,例如"TINYINT NOT NULL", "SMALLINT NOT NULL"等 const std::type_in 阅读全文
摘要:
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 类型 阅读全文