参数替换格式说明
在执行 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);