无符号字符* sqlite3_serialize( sqlite3 * db,/ *数据库连接* / const char * zSchema,/ *要序列化的数据库。例如:“ main”,“ temp”,... * / sqlite3_int64 * piSize,/ *在此处写入数据库的大小,如果不为NULL * / unsigned int mFlags / *零个或多个SQLITE_SERIALIZE_ *标志* / );
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位置1,但不存在数据库的连续副本,数据库的大小也会写入* P。
如果发生内存分配错误,即使从参数F省略了SQLITE_SERIALIZE_NOCOPY位,对sqlite3_serialize(D,S,P,F)的调用也可能返回NULL。
仅当使用SQLITE_ENABLE_DESERIALIZE选项编译SQLite时,此接口才可用 。