c - sqlite3 - 如何知道读取的行是最后一行
问题描述
我们正在使用sqlite3_prepare_v2
andsqlite3_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 记录。只有事先知道我们获取的记录是最后一条记录,我们才能做到这一点。
知道如何实现吗?
请注意我们知道我们可以重组代码如下,但它需要我们复制缓冲区和过多的 malloc/copy,因为 sqlite3_step 会破坏以前的数据。这是我们试图避免的,所以请不要建议。
while (sqlite3_step(statement) == SQLITE_ROW) {
if(data)
processRecordAndFree(data, 0);
data = duplicate_data(sqlite3_column_blob(statement, 0));
}
if(data)
processRecordAndFree(data, 1);
解决方案
推荐阅读
- authentication - 为 Solrcloud 8.8.2 配置 JWT 身份验证
- android - ionic ngx-dropzone 隐藏拍照IOS的选项
- date - Perl:从预先格式化的日期时间字符串中获取周数
- android - 构建发布后,Flutter 应用程序卡在白屏上
- javascript - 如何从 Firebase 存储下载 pdf
- django - 在基于 Django 的 GraphQL API 中为 postgres 表创建全局搜索字段的最佳方法?
- reactjs - vscode tsconfig 值保持重置为默认值
- javascript - 如何将数据存储在可从任何地方访问的 nextjs 中
- reactjs - 在 React 应用程序中使用标准类是不好的做法吗?
- azure-devops - 如何选择 google play 应用签名首选项以轻松将其集成到 Azure DevOps 发布管道中