QueryResult
QueryResult 类用于控制由 McoSqlEngine、RemoteSqlEngine 和 McoMultithreadedSqlEngine 类的 executeQuery()
方法以及 executePreparedQuery()
方法返回的 DataSource 对象。
isNumberOfRecordsKnown
bool isNumberOfRecordsKnown()
如果可以成功调用 nRecords()
方法,则返回 true 。
nRecords
int64_t nRecords(Runtime* runtime)
返回结果集中 Record 对象的数量。
records
返回结果集的游标。
fields
返回一个Field 对象可变长度数组 。
findField
Field* findField(char const * name )
通过名称(作为字符数组)在 DataSource 中查找 Field 。
findField
Field* findField(String * name )
通过名称(作为字符串)在 DataSource 中查找 ../Field 。
extract
将 Record 组件提取到相应的 C 结构体中。
示例
通常,QueryResult 对象是在某个函数或方法中实例化的,并在返回时释放。因为当 QueryResult 对象超出作用域时就会被释放。(请注意,未能释放 DataSource 对象可能会导致应用程序死锁。QueryResult 类有助于避免这种情况,因为在 QueryResult 析构函数中会调用 DataSource 方法 release()
,即使在抛出异常的情况下也能正确释放 DataSource。
以下代码片段展示了 QueryResult 类最常见的用法:
void show_results( char * sql )
{
QueryResult result(engine.executeQuery(sql));
Cursor* cursor = result->records();
while (cursor->hasNext())
{
Record* rec = cursor->next();
_Person p;
// 将“Person”记录提取到相应的结构体中
result->extract(rec, &p, sizeof(p));
printf("\t\t%d) Name=%s, Ordinal=%u\n", count, p.name, p.ordinal );
}
}