语句参数替换
传递给函数 mcosql_execute_query()
和 mcosql_execute_statement()
的 SQL 语句字符串允许根据类似于标准 printf()
格式字符串替换的规则将应用程序变量值替换到字符串中,但有一些细微差别。在 SQL 语句字符串中,如果百分号**“%”后面跟着单个字符或星号“*”**,则会根据以下类型规范将参数列表中相关变量的值替换进去:
替换符 | 说明 |
---|---|
%b | 0或1的一个字节值 |
%f | 一个双精度值 |
%i | 一个有符号的整数值(4 字节) |
%l | 一个有符号整数值(8 字节) |
%p | 一个 8 字节整数(例如autoid)的地址 |
%r | 映射到记录的结构体(类型为字符串的字段必须为 char* 类型) |
%R | 映射到记录的结构体(类型为 char<N> 的字段必须为 char[N] 类型) |
%s | 一个字符指针值(与字符串或 char<n> 字段相关联) |
%t | 一个 time_t 类型的值 |
%u | 一个无符号整数值(4 字节) |
%v | 一个 Value* 类型变量的地址(Value 类型的指针) |
%w | 一个与 nstring 或 nchar<n> 字段相关联的 wchar_t* 值 |
使用函数 mcosql_prepare_statement()
预编译语句时,可变长度参数列表通常旨在将程序变量绑定到 SELECT 语句结果集中的列。在这种情况下,需要的是接收结果集值的变量的地址。因此,对于 mcosql_prepare_statement()
,提供了以下额外的替换类型:
替换符 | 说明 |
---|---|
%*b | bool变量的地址 |
%*f | 双变量的地址 |
%*i | 整型变量的地址 |
%*l | 一个 int64_t 类型变量的地址 |
%*p | int64_t变量的地址(例如autoid) |
%*s | 字符串变量的地址(即 char**) |
%*S | 一个指向字符串或 char<n> 字段的间接引用的 char* 值 |
%*t | time_t 类型变量的地址 |
%*w | 指向 wchar_t* 变量的地址(即 wchar_t**) |
%*W | 一个宽字符指针值(对 nstring 或 nchar<n> 字段的间接引用) |
映射 SQL 日期和时间字段
为了将 C 语言中的日期或时间数据映射到 SQL 数据类型,C 应用程序应使用 8 字节的 mco_datetime 数据类型(而不是 mco_time 或 mco_date)。日期和时间类型在 SQL 中通过 8 字节的 tpDatetime 类型来表示。
使用 %l 或 *%l 替换说明符,因为这是一个 8 字节或 int64_t 值。
关于数值使用科学记数法的说明
对于数值类型使用科学计数法时(例如 7.5013e+006 而非 7501301),数字必须始终以数字开头,不能将数字定义为 ".e1"。