2010-09-29 22 views
6

Ai đó có thể đưa nhiều ánh sáng hơn về chức năng:sqlite3 chuẩn bị, ràng buộc và reseting statments

sqlite3_reset(); 
sqlite3_clear_bindings() 

Tôi hiểu rằng tôi có thể sử dụng sqlite3_prepare() dịch chuỗi sql mã byte bản địa mà động cơ hiểu. Do đó động cơ không phải dịch nó mỗi khi nó được sử dụng. Tôi cũng có thể parametrize tuyên bố chuẩn bị như vậy và sau đó ràng buộc các giá trị với nó với sqlite3_bind *() chức năng.

Tôi có thể gán giá trị NULL cho các thông số được liên kết này với sqlite3_clear_bindings(). Từ documentation người ta có thể đọc rằng sqlite3_reset(), không phá hủy các ràng buộc, các giá trị được bảo tồn và đối tượng được đưa vào trạng thái ban đầu. nó thực sự có nghĩa là gì? Đặc biệt là phần không phá hủy các ràng buộc.

Cảm ơn.

+0

Có đúng là khi bạn liên kết, khi đó các giá trị được sao chép vào stmt? (ngoài các hàm sqlite3_bind_text *() mà bạn phải chỉ định tham số thứ 5). – name

Trả lời

3

sqlite3_reset xóa trạng thái mà câu lệnh đã chuẩn bị được duy trì trong khi thực thi. Điều này đặt nó trở lại trạng thái ban đầu, do đó "đặt lại nó". Bindings vẫn còn nguyên vẹn. Câu lệnh có thể được thực hiện lại. Nếu không đặt lại nó, bạn sẽ nhận được một lỗi khi bạn cố gắng thực hiện nó.

sqlite3_clear_bindings sẽ chỉ xóa các ràng buộc, nhưng không thay đổi trạng thái trên câu lệnh đã chuẩn bị. Bạn không thể thực thi lại câu lệnh đã chuẩn bị nếu bạn chỉ xóa các ràng buộc.

Các vấn đề liên quan