unsigned char *sqlite3_serialize( sqlite3 *db, /* The database connection */ const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ );
sqlite3_serialize(D,S,P,F) 介面會傳回一個記憶體指標,該記憶體包含資料庫連線 D 上 S 資料庫的序列化結果。如果 P 不是 NULL 指標,則資料庫的大小(以位元組為單位)會寫入 *P。
對於一般的磁碟資料庫檔案,序列化結果只是磁碟檔案的副本。對於記憶體資料庫或「TEMP」資料庫,序列化結果與將該資料庫備份到磁碟時所寫入的位元組序列相同。
通常,sqlite3_serialize() 會將資料庫的序列化結果複製到從 sqlite3_malloc64() 取得的記憶體中,並傳回指向該記憶體的指標。呼叫者有責任釋放傳回的值以避免記憶體洩漏。但是,如果 F 參數包含 SQLITE_SERIALIZE_NOCOPY 位元,則不會進行記憶體配置,sqlite3_serialize() 函式將會傳回一個指向 SQLite 目前用於該資料庫的連續記憶體表示法的指標,如果沒有這樣的連續記憶體表示法,則傳回 NULL。資料庫的連續記憶體表示法通常只存在於先前呼叫 sqlite3_deserialize(D,S,...) 時使用了相同的 D 和 S 值的情況下。即使設定了 SQLITE_SERIALIZE_NOCOPY 位元,但沒有資料庫的連續副本存在,資料庫的大小仍會寫入 *P。
呼叫後,如果已設定 SQLITE_SERIALIZE_NOCOPY 位元,則傳回的緩衝區內容將保持可存取且不變,直到連線上的下一次寫入操作或連線關閉為止,應用程式不得修改緩衝區。如果該位元已清除,SQLite 在呼叫後將不會存取傳回的緩衝區。
即使從參數 F 中省略了 SQLITE_SERIALIZE_NOCOPY 位元,如果發生記憶體配置錯誤,呼叫 sqlite3_serialize(D,S,P,F) 也可能會傳回 NULL。
如果使用 SQLITE_OMIT_DESERIALIZE 選項編譯 SQLite,則會省略此介面。