调试SQLite语句

时间:2009-10-28 21:26:00

标签: c sqlite

我在我的数据库上运行了这个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,它可以正常工作。但是有一个原因我正在使用命名参数,我不能这样做。什么错了!?

1 个答案:

答案 0 :(得分:0)

是的,这是一个PEBKAC。