我在我的数据库上运行了这条 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/