c - 调试 SQLite 语句

标签 c sqlite

我在我的数据库上运行了这条 SQL 语句,我确信它是正确的,但它没有对数据库进行任何更改。我该如何调试它?

查询:

UPDATE task SET name=?, description=?, startDate=?, dueDate=?, complete=?, status=?, percentComplete=?, taskType=? WHERE rowId=:rowId

我有条件地绑定(bind)前 8 个参数,具体取决于它们是否为空。最后一个参数在所有情况下都绑定(bind)到当前的 rowId(绑定(bind)时我已经验证了 rowId 是正确的)。像这样:

int rowIdIdx = sqlite3_bind_parameter_index(stmt, ":rowId");
if (rowIdIdx > 0) {
  sqlite3_bind_int(stmt,rowIdIdx,rowId);
}

我还验证了绑定(bind)rowId时rowIdIdx等于9。但是当对 sqlite_step 的调用返回时(总是带有 SQLITE_DONE),数据库永远不会改变,并且 sqlite3_changes(db) 总是返回 0。

但是,如果我删除 WHERE 子句,表中的每一行都会得到更新,并且 sqlite3_changes(db) 返回数字表中的行数。

这一切都在我之前使用过的框架内,其中更新语句工作得很好。因此,首先,我是否缺少任何明显的东西,其次,我该如何尝试调试它?

编辑:

经过一些检查,如果我将 :rowId 替换为另一个正常的 ? 参数,它可以正常工作。但是我使用命名参数是有原因的,我不能这样。怎么了!?

最佳答案

是的,这是一个 PEBKAC。

关于c - 调试 SQLite 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640219/

相关文章:

c - 使用数组打印菜单图标不起作用?

c - malloc 和 free 的实现

c - 从标准输入读取系统生成和手动输入时出现 fread 问题

c - 如何? - 彩票模拟(C)

Android sqlite 更新问题

python - Flask-RESTful 项目结构

MYSQL_ROW 和 row[0] 转字符串类型?

ios - 如何在 iphone iOS 中使用参数在 SQLITE 中形成 LIKE 语句?

sqlite - 使用内存中的 sqlite DB 加速单元测试时避免 DB 依赖的建议

java - 如何将用户在一种方法中获得的值用于同一类中的其他方法