sqlite3-如何知道读取的行是最后一行

时间:2019-01-11 07:28:37

标签: c sqlite

我们正在使用sqlite3_prepare_v2sqlite3_step来执行查询并读取结果。但是,我们需要知道获取的行是最后一行,而不执行下一个sqlite3_step语句。有想法吗?

这样做的原因是特殊的优化要求。为了进一步说明,下面是从表中读取未知行数的代码。我们的代码要求知道最后一条记录,以便可以采取特殊措施。

从代码中可以看到,我们将最后一个数据发送为NULL,以将其标记为读取结束。我们这样做是为了可以直接使用sqlite3_column_blob返回的缓冲区,而无需任何malloc / copy。

sqlite3_stmt *statement;
char *data = NULL;

if (sqlite3_prepare_v2(mdb, sql, -1, &statement, NULL) != SQLITE_OK) {
               return -1;
}


while (sqlite3_step(statement) == SQLITE_ROW) {

       data = (char *)sqlite3_column_blob(statement, 0);

       processRecord(data, 0); //data and last row indicator
}

processRecord(NULL, 1); //data and last row indicator

我们要避免发送最后一个NULL记录。只有事先知道所获取的记录是最后一条记录,我们才能实现这一目标。

有什么想法要实现吗?

  

请注意,我们知道我们可以按照以下方式重新组织代码,但是由于sqlite3_step会破坏先前的数据,因此它需要我们复制缓冲区和过多的malloc / copy。我们正在努力避免这种情况,因此请不要建议。

while (sqlite3_step(statement) == SQLITE_ROW) {
       if(data)
           processRecordAndFree(data, 0); 

       data = duplicate_data(sqlite3_column_blob(statement, 0));
}

if(data)
           processRecordAndFree(data, 1); 

0 个答案:

没有答案