SQLite C 接口

序列化数据库

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。

如果发生内存分配错误,即使从参数 F 中省略了 SQLITE_SERIALIZE_NOCOPY 位,对 sqlite3_serialize(D,S,P,F) 的调用也可能返回 NULL。

如果使用SQLITE_OMIT_DESERIALIZE选项 编译 SQLite,则省略此接口 。

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