2009-10-28 8 views
2

J'ai cette instruction SQL en cours d'exécution sur ma base de données et je suis sûr que c'est correct, mais cela n'apporte aucune modification à la base de données. Comment puis-je le déboguer?Débogage des instructions SQLite

la requête:

UPDATE task SET name=?, description=?, startDate=?, dueDate=?, complete=?, status=?, percentComplete=?, taskType=? WHERE rowId=:rowId 

I se lient conditionnellement les 8 premiers paramètres en fonction de si elles sont nulles. Le dernier paramètre est lié dans tous les cas au rowId courant (j'ai vérifié que le rowId est correct lors de la liaison). Quelque chose comme ceci:

int rowIdIdx = sqlite3_bind_parameter_index(stmt, ":rowId"); 
if (rowIdIdx > 0) { 
    sqlite3_bind_int(stmt,rowIdIdx,rowId); 
} 

J'ai aussi vérifié que rowIdIdx est égal à 9 lors de la liaison rowId. Mais quand l'appel à sqlite_step retours (toujours avec SQLITE_DONE), la base de données ne change jamais, et sqlite3_changes(db) retourne toujours 0.

Cependant, si je retire la clause WHERE, chaque ligne de la table ne obtenir mis à jour, et sqlite3_changes(db) renvoie le nombre de lignes de la table.

Tout cela est dans un cadre que j'ai utilisé auparavant où les instructions de mise à jour fonctionnent très bien. Donc tout d'abord, y a-t-il quelque chose d'évident qui me manque, et en second lieu, comment puis-je même essayer de déboguer cela?

Edit:

Après un peu de contrôle, si je remplace: rowId avec juste un autre paramètre ? normal, il fonctionne très bien. Mais il y a une raison pour laquelle j'utilise des paramètres nommés et je ne peux pas le laisser de cette façon. QU'EST-CE QUI NE VA PAS!?

Répondre

0

Oui, c'était un PEBKAC.

Questions connexes