将未知大小的大blob写入SQLite

将未知大小的大blob写入SQLite,sqlite,Sqlite,我正在实现一个流接口,它从流(例如HTTP下载ord Android content://share)获取二进制数据,并将其存储到SQLite blob中 有没有一种方法可以使用sqlite3\u blob\u open和sqlite3\u blob\u write接口,而不必事先知道终端大小 sqlite3\u blob\u open声明: 使用sqlite3_blob_bytes()接口确定打开的blob的大小。此接口不能更改blob的大小。使用updatesql命令更改blob的大小 我

我正在实现一个流接口,它从流(例如HTTP下载ord Android content://share)获取二进制数据,并将其存储到SQLite blob中

有没有一种方法可以使用
sqlite3\u blob\u open
sqlite3\u blob\u write
接口,而不必事先知道终端大小

sqlite3\u blob\u open
声明:

使用sqlite3_blob_bytes()接口确定打开的blob的大小。此接口不能更改blob的大小。使用updatesql命令更改blob的大小


我当前的代码如下所示。设置初始大小(1):

获取blob句柄(2),这是围绕
sqlite3\u blob\u open的包装:

    auto blob = session_->openBlob("main", "attachments_content",
                                  "content", rowid,
                                  SmartSqlite::Blob::READWRITE);
写一段数据(3):


鉴于
blob
对象无法调整blob的大小,是否有其他方法可以增量增加blob大小,然后接收更多数据?

修改blob的方法只有三种:

  • 使用SQL语句,或
  • 要使用无法调整blob大小的
    sqlite3\u blob_*()
    接口,或
  • 直接修改
由于SQLite的原因,更改blob的大小可能需要重写整行。因此,你想要的东西不能有效地完成


<>我会考虑把这个流写成一个临时文件,然后处理它。

听起来似乎是合理的,谢谢。但我仍有一些希望,希望有人能解决这一限制。
    auto blob = session_->openBlob("main", "attachments_content",
                                  "content", rowid,
                                  SmartSqlite::Blob::READWRITE);
        blob.write(data.data(), data.size(),
                   progress.bytesProcessed /* offset */);