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,则省略此接口 。

另请参阅 对象常量函数的列表。