C++ SQLite3 准备的删除语句不起作用
C++ SQLite3 prepared delete statement not working
我有一个循环访问SQLite3数据库的C++应用程序。每行包含一个 ID,该 ID 根据向量进行检查。如果数据库中的 ID 不存在于向量中,则应使用预准备语句将其删除。我使用以下代码,但是ID不会被删除。我也无法从sqlite3_step(stmt2)
函数中获取错误消息。
//SETTINGS["Reference"] CONTAINS THE REFERENCE FOR THE ID's (IT's 1 FOR UNDERNEATH EXAMPLE)
vector<int> IDs; //THIS VECTOR CONTAINS THE ID's IN MY APPLICATION
rc = sqlite3_prepare_v2(db, "SELECT ID FROM Files WHERE Reference=?", -1, &stmt, 0);
sqlite3_bind_text(stmt, 1, Settings["Reference"].c_str(), Settings["Reference"].length(), 0);
CheckDBError(rc);
rc = sqlite3_step(stmt);
sqlite3_stmt* stmt2;
int rc2 = sqlite3_prepare_v2(db, "DELETE FROM Files WHERE ID=? AND Reference=?", -1, &stmt2, 0);
CheckDBError(rc2);
while(rc == SQLITE_ROW) {
string IDToCheck = NumberToString(sqlite3_column_int64(stmt, 0));
if (std::find(IDs.begin(), IDs.end(), IDToCheck) == IDs.end()) { //VERIFY AGAINST VECTOR WORKS AS EXPECTED
//I GET HERE WITH ALL MY ID's I HAVE CHECKED THAT ALREADY :)
sqlite3_bind_text(stmt2, 1, IDToCheck.c_str(), IDToCheck.length(), 0);
sqlite3_bind_text(stmt2, 2, Settings["Reference"].c_str(), Settings["Reference"].length(), 0);
rc2 = sqlite3_step(stmt2);
//CAN'T GET ANY ERROR MESSAGE (SO QUERY IS FINE, WHICH SEEMS LIKE IT?)
}
rc = sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
sqlite3_finalize(stmt2);
您不得在 while
块之前调用 finalize
函数,因为这样您就可以在使用语句之前完成语句。根据SQLite文档(强调我的(:
对于应用程序来说,尝试使用准备好的 定稿后的声明。任何使用预准备语句 最终确定后可能会导致未定义和不受欢迎的 段错误和堆损坏等行为。
相关文章:
- 是否可以使用if constexpr删除控制流语句
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- 是否可以删除此条件语句
- C++ SQLite3 不使用预准备语句删除
- C++ SQLite3 准备的删除语句不起作用
- 在设置 if-else 语句以删除特定货币并保持更新时遇到问题
- 删除"超出矢量误差范围"的打印语句后输出不同的根本原因
- 当我通过删除临时节点来释放内存时,我会得到读取访问违规行为.但是只有当我返回错误语句时
- 通过找到一种删除许多 if 语句的方法来简化代码
- For 循环结束自身并终止正在运行的程序,但在删除斜率计算语句时正常运行
- 正在删除的在switch语句中使用的GLSL统一格式
- 如何在 android L 上加载 OpenCV 时删除日志记录语句
- 从选取的语句中删除选项
- 正在删除导致分段错误的cout语句
- 有没有办法从这个sql语句和逻辑中删除select count(*)
- 基于条件语句删除循环中的矢量元素
- 编译器是否删除模板中类型的条件语句
- 我应该把删除语句在我的代码中,以消除内存泄漏
- NDK如何在发布时删除日志调试语句
- 如何在一条删除语句中删除多个动态分配的数组