2009-10-28 2 views
2

У меня есть эта инструкция SQL, запущенная в моей базе данных, и я уверен, что это правильно, но она не вносит никаких изменений в базу данных. Как я могу его отладить?Отладка операторов SQLite

Запрос:

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 только с другим нормальным ? параметром, он отлично работает. Но есть причина, по которой я использую именованные параметры, и я не могу оставить его таким образом. ЧТО НЕ ТАК!?

ответ

Смежные вопросы