SQLite C 接口
反序列化数据库
int sqlite3_deserialize( sqlite3 *db, /* The database connection */ const char *zSchema, /* Which DB to reopen with the deserialization */ unsigned char *pData, /* The serialized database content */ sqlite3_int64 szDb, /* Number bytes in the deserialization */ sqlite3_int64 szBuf, /* Total size of buffer pData[] */ unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ );
sqlite3_deserialize(D,S,P,N,M,F)接口导致 数据库连接D断开与数据库S的连接,然后根据P中包含的序列化重新打开S作为内存数据库。序列化后的数据库P为N字节大小。M 是缓冲区 P 的大小,它可能大于 N。如果 M 大于 N,并且 F 中没有设置 SQLITE_DESERIALIZE_READONLY 位,那么 SQLite 允许向内存数据库添加内容,只要总大小不超过 M 字节。
如果在 F 中设置了 SQLITE_DESERIALIZE_FREEONCLOSE 位,则当数据库连接关闭时,SQLite 将在序列化缓冲区上调用 sqlite3_free()。如果设置了 SQLITE_DESERIALIZE_RESIZEABLE 位,则如果对数据库的写入导致其增长超过 M 字节,则 SQLite 将尝试使用 sqlite3_realloc64() 增加缓冲区大小。
如果数据库当前处于读取事务或涉及备份操作,则 sqlite3_deserialize() 接口将失败并返回 SQLITE_BUSY。
无法反序列化到 TEMP 数据库中。如果 sqlite3_deserialize(D,S,P,N,M,F) 的 S 参数是“temp”,则该函数返回 SQLITE_ERROR。
如果 sqlite3_deserialize(D,S,P,N,M,F) 由于任何原因失败,并且如果在参数 F 中设置了 SQLITE_DESERIALIZE_FREEONCLOSE 位,则 在返回之前对参数 P 调用sqlite3_free() 。
如果使用SQLITE_OMIT_DESERIALIZE选项 编译 SQLite,则省略此接口 。