ストリームからバイナリデータを取得するストリームインターフェイス(たとえば、HTTPダウンロードのAndroidコンテンツ://共有)を実装し、SQLite BLOBに保存します。未知のサイズの大きなブロブをSQLiteに書き込む
エンドサイズを事前に知らなくてもsqlite3_blob_open
とsqlite3_blob_write
インターフェイスを使用する方法はありますか?
は(sqlite3_blob_bytesを使用して)開いたブロブのサイズを決定するためのインターフェース:
sqlite3_blob_open
状態。ブロブのサイズは、このインタフェースでは変更できません。 BLOBのサイズを変更するには、UPDATE SQLコマンドを使用します。
私の現在のコードは次のようになります。 (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();
}
は、BLOBハンドルを取得する(2)、これはsqlite3_blob_open
のラッパーです:
auto blob = session_->openBlob("main", "attachments_content",
"content", rowid,
SmartSqlite::Blob::READWRITE);
は、(3)データの一部を書く:
blob.write(data.data(), data.size(),
progress.bytesProcessed /* offset */);
blob
オブジェクトがblobのサイズを変更できない場合、インクリメンタルにBLOBサイズを増やしてより多くのデータを受け取る方法はありますか?修正ブロブの
ありがとうございます。しかし、私はまだ誰かがこの制限の回避策を持っているという希望を持っています。 –