vexecuteQuery
这些方法使用参数变量列表执行一个 SQL 选择语句,返回一个包含满足查询的表行集的 QueryResult 。
vexecuteQuery() 的前三个版本会启动一个隐式只读数据库事务,并在完成时回滚该事务。当调用第二组三个版本的 vexecuteQuery()(带有 trans 参数)时,该查询会在这个事务的上下文中执行。调用应用程序代码负责启动、提交或回滚该事务。
ResultSet* SqlEngine::vexecuteQuery(sql, list);
ResultSet* SqlEngine::vexecuteQuery(sql, params);
ResultSet* SqlEngine::vexecuteQuery(sql, params, nParams);
ResultSet* SqlEngine::vexecuteQuery(trans, sql, list);
ResultSet* SqlEngine::vexecuteQuery(trans, sql, params);
ResultSet* SqlEngine::vexecuteQuery(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 。
返回
QueryResult
此方法返回一个QueryResult 对象。
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); // 共享内存模式的映射地址
...
Query(trans, "select * from Person where name like %s", "Thomas");
...
}
void Query(Transaction* trans, const char * sql, ...)
{
va_list list;
va_start(list, sql);
QueryResult result(engine.vexecuteQuery(trans, sql, list));
va_end(list);
...
}