从没有memcpy的sqlite db获取blob

时间:2014-05-21 10:38:14

标签: c sqlite memcpy

有没有办法从列中获取blob并将其所有权传递给其他人?当我从sqlite3表中获取blob(或其他类型的数据)时,我想避免额外的分配和memcpy。

根据文件:

  

返回的指针有效,直到发生类型转换为止   如上所述,或直到sqlite3_step()或sqlite3_reset()或   调用sqlite3_finalize()。用于保存字符串的内存空间   和BLOB自动释放。不要传递返回的指针   从sqlite3_column_blob(),sqlite3_column_text()等转换成   sqlite3_free()。​​

例如: 我在sqlite db中将位图对象存储为blob。当我在这个名为setPixels的位图上有方法时,它将指针的所有权传递给该位图。在当前的解决方案中,我为每个位图分配两次内存。一次从db中使用sqlite取出,第二次将新指针传递给位图时。

1 个答案:

答案 0 :(得分:0)

sqlite3_column_blob返回的缓冲区是内部的;没有改变其所有权的机制。

如果您的blob确实太大以至于缓冲区管理对性能有影响,您可以Open A BLOB For Incremental I/ORead Data From A BLOB Incrementally