我正在实现一个流接口,它从流中获取二进制数据(例如 HTTP 下载或 Android content:// 共享)并将其存储到 SQLite blob 中。
有没有办法在不提前知道最终尺寸的情况下使用sqlite3_blob_open和sqlite3_blob_write接口?
sqlite3_blob_open 指出:
使用 sqlite3_blob_bytes() 接口来确定打开的 blob 的大小。此接口可能不会更改 blob 的大小。使用 UPDATE SQL 命令更改 blob 的大小。
我当前的代码看起来像这样。设置初始大小 (1):
// set size of attachment
{
auto stmt = session_->prepare(
"UPDATE attachments_content "
"SET content = zeroblob(:size) "
"WHERE rowid = :rowid");
stmt.bind(":size", size_);
stmt.bind(":rowid", rowid);
stmt.execWithoutResult();
}
Run Code Online (Sandbox Code Playgroud)
获取 blob 句柄 (2),这是一个包装sqlite3_blob_open:
auto blob = session_->openBlob("main", "attachments_content",
"content", rowid,
SmartSqlite::Blob::READWRITE);
Run Code Online (Sandbox Code Playgroud)
写一段数据(3):
blob.write(data.data(), data.size(),
progress.bytesProcessed /* offset */);
Run Code Online (Sandbox Code Playgroud)
鉴于blob对象无法调整 blob 的大小,有没有其他方法可以逐步增加 blob 大小然后接收更多数据?
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |