【发布时间】:2021-04-25 17:44:59
【问题描述】:
是否可以遍历结果集,如果满足条件,则删除当前行?
即像
int rc;
sqlite3_stmt* statement;
sqlite3_exec(db, "BEGIN", 0, 0, 0);
sqlite3_prepare_v2(_db, "SELECT id,status,filename,del FROM mytable", -1, &statement, NULL);
rc = sqlite3_step(statement);
while (rc == SQLITE_ROW){
int id = sqlite3_column_int(statement, 1);
int status = sqlite3_column_int(statement, 2);
const unsigned char* filename = sqlite3_column_int(statement, 3);
int del = sqlite3_column_int(statement, 4);
if (status == 0 || del > 0){
int rc = unlink(filename);
if (rc == 0)
// Now delete the current row
else
// unlink failed, find out why, try again or ... ?
}
rc = sqlite3_step(statement);
}
sqlite3_finalize(statement);
sqlite3_exec(db, "COMMIT", 0, 0, 0);
我可以只调用一个 sql 语句来删除所有符合条件的行,但如果由于某种原因取消链接失败,我不想这样做。
我可以调用一个操作来删除当前行吗?
编辑: 所以有一个特殊的列叫rowid。我是否只是将其添加为 上一条语句并创建另一个语句,例如“从 rowid = 的表中删除?”并传入当前的rowid?
应该可以吧?这是最好的方法吗?
【问题讨论】:
-
好的,我用rowid让它工作了。但仍然想知道这是否是最有效的方法。