int sqlite3_close(sqlite3*); int sqlite3_close_v2(sqlite3*);
sqlite3_close()
和 sqlite3_close_v2()
常式是 sqlite3
物件的解構函式。如果成功銷毀 sqlite3
物件並釋放所有相關資源,則呼叫 sqlite3_close()
和 sqlite3_close_v2()
會返回 SQLITE_OK
。
理想情況下,應用程式應在嘗試關閉物件之前完成所有已準備的陳述式 (prepared statements)、關閉所有BLOB 控制代碼 (BLOB handles),並完成與 sqlite3
物件關聯的所有 sqlite3_backup
物件。如果資料庫連線與未完成的已準備陳述式、BLOB 控制代碼和/或未完成的 sqlite3_backup
物件相關聯,則 sqlite3_close()
將使資料庫連線保持開啟並返回 SQLITE_BUSY
。如果在存在未完成的已準備陳述式、未關閉的 BLOB 控制代碼和/或未完成的備份的情況下呼叫 sqlite3_close_v2()
,它會返回 SQLITE_OK
,但它不會立即釋放資料庫連線,而是將資料庫連線標記為無法使用的「殭屍 (zombie)」,並安排在所有已準備的陳述式完成、所有 BLOB 控制代碼關閉以及所有備份完成後自動釋放資料庫連線。sqlite3_close_v2()
介面旨在與具有垃圾回收機制的宿主語言一起使用,在這些語言中,解構函式的呼叫順序是任意的。
如果在交易開啟時銷毀 sqlite3
物件,則交易會自動回滾。
sqlite3_close(C)
和 sqlite3_close_v2(C)
的 C
參數必須是 NULL
指標或從 sqlite3_open()
、sqlite3_open16()
或 sqlite3_open_v2()
獲取且先前未關閉的 sqlite3
物件指標。使用 NULL
指標參數呼叫 sqlite3_close()
或 sqlite3_close_v2()
是一個無害的空操作 (no-op)。