Отладка операторов SQLite - PullRequest
       11

Отладка операторов SQLite

2 голосов
/ 29 октября 2009

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

1 Ответ

0 голосов
/ 29 октября 2009

Да, это был PEBKAC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...