参数替换格式说明
在执行 McoSqlEngine 方法 executeStatement()
、executeQuery()
或 prepare()
,或者其对应的 C API 时,用于将变量值替换到 SQL 字符串中的格式说明符在以下部分中定义。
在 SQL 字符串参数中,只要出现**%<specifier>**的情况,就会进行参数替换。
execute格式说明符
以下表格列出了 C++ McoSqlEngine 方法 executeStatement()
和 executeQuery()
或 C API 等效方法 mcosql_execute_statement()
或 mcosql_execute_query()
中 SQL 语句参数的允许格式说明符:
说明符 | C++ 类型 | 含义 |
---|---|---|
b | bool | 布尔值 |
i | int | 32位整型 |
u | unsigned int | 32位非负整型 |
l | int64_t | 64位整型 |
p | ref | SmartEDB 引用 |
f | double | 双精度 64 位浮点值 |
t | time_t | 日期/时间 |
w | wchar_t | 宽字符串 |
s | char * | 多字节字符串 |
r | - | 指向结构体的指针 |
R | - | 指向固定结构的指针 |
* | - | 间接限定符:与另一种类型说明符结合使用,表示指向指定类型值的指针 |
v | Value | 任意值 |
0-9 | - | 参数数组中与该索引相对应的元素 |
示例
将类型为 struct_Contribution 的变量 c
的所有字段映射到 Contribution
表的字段:
struct _Contribution
{
char const * name;
uint4 date_val;
uint4 amount;
} c;
...
executeStatement("insert into Contributions %r", c);
将变量 age
(整型)、weight
(双精度型)和 name
(字符型指针)映射到 Person
表的相应列:
executeStatement("update Person set age=%i, weight=%f where name=%s", age, weight, name);
将变量 cutoff_date
(日期类型)映射到查询选择语句的 where 子句中:
executeQuery("select * from Person where date_of_birth > %t", cuttoff_date);.
使用 C API,将变量 salary
(无符号整型)、rating
(双精度型)和 name
(字符指针)映射到一个更新语句中:
mcosql_execute_statement(sql_db, NULL, &rc,
"update Person set salary=%u, rating=%f where name=%s",
salary, rating, name );
prepare格式说明符
对于预编译语句,允许使用的格式说明符与上述列表中的略有不同。以下表格列出了可用于 C++ McoSqlEngine 方法 prepare()
或 C API 等效方法 mcosql_prepare_statement()
的 SQL 语句参数的允许格式说明符:
Specifier | C++ Type | Meaning |
---|---|---|
b | bool | 布尔值 |
h | int2 | 整型 |
i<N> | int | 宽度为 N 的整数:1、2、4 或 8 |
u<N> | unsigned int | 宽度为 N 的非负整数:1、2、4 或 8 |
l | int64_t | 64位整型 |
p | ref | SmartEDB 引用 |
f | double | 双精度 64 位浮点值 |
t | time_t | 日期/时间 |
w | wchar_t | 宽字符串 |
s | char ** | 指向字符指针的指针 |
S | char * | 指向字符数组的指针 |
r | - | 映射到记录的结构体(记录字段为字符串类型时应具有 char* 类型) |
R | - | 映射到记录的结构体(记录字段类型为 char<N> 的应具有类型 char[N]) |
*b | bool * | 指向布尔值的指针 |
*h | int2* | 宽度为 2 的整型指针 |
*i<N> | int * | 宽度为 N 的整型指针:1、2、4 或 8 |
*u<N> | unsigned int * | 宽度为 N 的无符号整型指针:1、2、4 或 8 |
*l | int64_t * | 64 位整型 |
*p | ref * | SmartEDB 引用 |
*f | double* | 指向双精度 64 位浮点值的指针 |
*t | time_t* | 指向日期/时间的指针 |
*s | char** | 指向字符指针的指针 |
*w | wchar_t** | 指向宽字符字符串的指针 |
*W | char * | 指向固定大小的 Unicode 字符串的指针 |
A<N,S> | - | 数组:以 C 风格数组的形式传递。参数:N=元素数量,S=元素大小 |
I<N> | - | 整数数组:N = 元素数量 |
U<N> | 非负整数数组:N = 元素数量 | |
F<N> | - | 根据 N 的值为 4(单精度浮点数)或 8(双精度浮点数)而定的单精度或双精度浮点数数组 |
L | - | 作为双精度数传递的整数值 |
v | - | 指向 McoSql::Value 的指针 |
% | - | 百分号 |
示例
PreparedStatement pStmt = PreparedStatement();
char * name = “Michael”;
engine.prepare(pStmt, "select * from Person where name like %s", name));
QueryResult result( engine.executePreparedQuery(pStmt);