vexecuteStatement
这些方法执行带有可变参数列表的 SQL 插入、更新或删除语句,返回一个整数值,表示受影响的表行数。
vexecuteQuery() 的前三个版本会启动一个隐式只读数据库事务,并在完成时回滚该事务。当调用第二组三个版本的 vexecuteQuery()(带有 trans 参数)时,该查询会在这个事务的上下文中执行。调用应用程序代码负责启动、提交或回滚该事务。
int64_t SqlEngine::vexecuteStatement(sql, list);
int64_t SqlEngine::vexecuteStatement(sql, params);
int64_t SqlEngine::vexecuteStatement(sql, params, nParams);
int64_t SqlEngine::vexecuteStatement(trans, sql, list);
int64_t SqlEngine::vexecuteStatement(trans, sql, params);
int64_t SqlEngine::vexecuteStatement(trans, sql, params, nParams);
参数
sql
char const*
包含可能从变量列表中替换参数的 SQL 选择语句的字符串。
trans
Transaction*
一个事务实例。当传递时,不会启动或提交隐式数据库事务。
当不存在时,SQL 选择语句会在隐式数据库事务中执行。
list
va_list*
一个包含要替换到 SQL 字符串中的参数列表的 va_list 类型的参数。
参数替换,请参阅参数替换格式说明页面。
params
Value**
指向一个或多个 Value 参数的指针。
nParams
size_t
一个整数值,用于指定数组 params 中 Value 对象的数量,如果数量未知则为 -1 。
返回
int
这些方法返回一个整数值,表示受影响的表行数。
RuntimeException
在出现错误的情况下抛出一个 RuntimeException 异常。
示例
const char * dbname = "SqlDb";
int main(int argc, char* argv[])
{
McoSqlEngine engine;
...
engine.open(db_name, // 数据库名
SqlDb_get_dictionary(), // 数据库字典
DATABASE_SIZE, // 数据库大小
MEMORY_PAGE_SIZE, // 页面大小:通常由处理器架构决定。
MAP_ADDRESS); // 共享内存模式的映射地址
...
DoSql(trans, "insert into Person(name) values('%s')", "Thomas");
...
}
void DoSql(Transaction* trans, const char * sql, ...)
{
va_list list;
int64_t rc;
va_start(list, sql);
rc = engine.vexecuteStatement(trans, sql, list);
va_end(list);
...
}