У меня есть этот 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);
}
Я также проверил, что rowIdIdx равен 9 при привязке rowId. Но когда возвращается вызов sqlite_step (всегда с SQLITE_DONE), база данных никогда не изменяется, и sqlite3_changes(db)
всегда возвращает 0.
Однако, если я удаляю предложение WHERE
, каждая строка в таблице обновляется , а sqlite3_changes(db)
возвращает количество строк в таблице.
Это все в рамках, которые я использовал ранее, где операторы обновления работают просто отлично. Итак, во-первых, есть ли что-то очевидное, чего мне не хватает, и, во-вторых, как мне вообще попытаться отладить это?
Edit:
После небольшой проверки, если я заменю: rowId просто другим нормальным ?
параметром, он работает нормально. Но есть причина, по которой я использую именованные параметры, и я не могу оставить это так. ЧТО НЕПРАВИЛЬНО??