我在我的数据库上运行了这个SQL语句,我确信它是正确的,但它没有对数据库进行任何更改。我该如何调试呢?
查询:
UPDATE task SET name=?, description=?, startDate=?, dueDate=?, complete=?, status=?, percentComplete=?, taskType=? WHERE rowId=:rowId
我有条件地绑定前8个参数,具体取决于它们是否为空。在所有情况下,最后一个参数绑定到当前rowId(我已经验证绑定时rowId是正确的)。像这样:
int rowIdIdx = sqlite3_bind_parameter_index(stmt, ":rowId");
if (rowIdIdx > 0) {
sqlite3_bind_int(stmt,rowIdIdx,rowId);
}
我还验证了绑定rowId时rowIdIdx等于9。但是当调用sqlite_step(始终使用SQLITE_DONE)时,数据库永远不会更改,sqlite3_changes(db)
始终返回0.
但是,如果删除WHERE
子句,表中的每一行都会更新,sqlite3_changes(db)
将返回表中的行数。
这一切都在我之前使用过的框架中,而更新语句的工作正常。首先,有什么明显的东西是我遗漏的,其次,我怎么去尝试调试呢?
修改
经过一些检查,如果我用另一个正常?
参数替换:rowId,它可以正常工作。但是有一个原因我正在使用命名参数,我不能这样做。什么错了!?
答案 0 :(得分:0)