2010-09-29 9 views
6

Quelqu'un peut-il mettre plus de lumière sur les fonctions:sqlite3 préparation, reliure et reseting statments

sqlite3_reset(); 
sqlite3_clear_bindings() 

Je comprends que je peux utiliser sqlite3_prepare() traduire chaîne SQL en code octet natif qui moteur comprend. Par conséquent, le moteur n'a pas à le traduire chaque fois qu'il est utilisé. Je peux également paramétrer une telle instruction préparée et la lier par la suite avec les fonctions sqlite3_bind *().

Je peux attribuer une valeur NULL à ces paramètres liés avec sqlite3_clear_bindings(). De documentation on peut lire que sqlite3_reset(), ne détruit pas les liaisons, les valeurs sont conservées et l'objet est mis dans l'état initial. Qu'est-ce que cela signifie réellement? Surtout la partie sur ne pas détruire les liaisons.

Merci.

+0

Est-il correct que lorsque vous liez, les valeurs sont copiées dans le stmt? (outre les fonctions sqlite3_bind_text *() où vous devez spécifier le 5ème param). – name

Répondre

3

sqlite3_reset efface l'état que l'instruction préparée a été conservée pendant l'exécution. Cela le ramène à l'état initial, le "réinitialisant". Les liaisons restent intactes. L'instruction peut être ré-exécutée. Sans le réinitialiser, vous recevrez une erreur lorsque vous essaierez de l'exécuter.

sqlite3_clear_bindings va simplement effacer les liaisons, mais ne pas modifier l'état de l'instruction préparée. Vous ne pouvez pas ré-exécuter une instruction préparée si vous venez de supprimer les liaisons.