gpt4 book ai didi

c - 调试 SQLite 语句

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:21 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com