2010-09-29 16 views
6

ktoś może umieścić więcej światła na funkcjach:sqlite3 przygotowania, oprawa i resetowanie statments

sqlite3_reset(); 
sqlite3_clear_bindings() 

Rozumiem, że można używać sqlite3_prepare() tłumaczyć sql ciąg do natywnego kodu bajtowego, który silnik rozumie. Dzięki temu silnik nie musi go tłumaczyć za każdym razem, gdy jest używany. Mogę również sparametryzować taką przygotowaną instrukcję i później powiązać z nią wartości za pomocą funkcji sqlite3_bind *().

Mogę przypisać wartość NULL do tych wiązanych params z sqlite3_clear_bindings(). Od documentation można przeczytać, że sqlite3_reset(), nie niszczy wiązań, wartości są zachowywane, a obiekt jest wprowadzany do stanu początkowego. Co to właściwie znaczy? Szczególnie część o nie niszczeniu wiązań.

Dzięki.

+0

Czy to prawda, że ​​po związaniu wartości są kopiowane do stentu? (oprócz funkcji sqlite3_bind_text *(), w których musisz określić 5. parametr). – name

Odpowiedz

3

sqlite3_reset czyści stan, w którym przygotowana instrukcja została zachowana podczas wykonywania. Przywraca to stan początkowy, a więc "resetuje go". Wiązania pozostają nienaruszone. Instrukcja może zostać ponownie wykonana. Bez resetowania otrzymasz komunikat o błędzie podczas próby jego uruchomienia.

sqlite3_clear_bindings po prostu usunie wiązania, ale nie zmieni stanu przygotowanego wyciągu. Nie można ponownie wykonać przygotowanej instrukcji, jeśli właśnie wyczyściłeś powiązania.