インターネットからデータベースをダウンロードします。 datasesフォルダーに保存して開きます。データベース内には、6つのフィールドを持つテーブル「Ads」があります。これらのフィールドのうち2つはBLOBです。このテーブルから読み取りたい場合...問題があります... 1メガバイトを超えるblobフィールドを持つ行を読み取ると、例外が発生することに気付きました... "行からフィールドスロットを取得します0列0が失敗しました」。それが小さな塊なら、すべて大丈夫です...事前に感謝します:)
動的な解凍により、内部アセットには1MBの制限があります。 1MBの制限はカーソルblobにも適用されるようですが、これはどこにも文書化されていないようです。
一般に、SQLiteのblobはパフォーマンスが低いため、避ける必要があります。代わりに、blobデータをファイルとして保存し、ファイルの場所をDBに保存します。
SQLiteデータベースから100KB未満のBLOBを読み取る方が、ファイルシステムから読み取るよりも高速です。ただし、それより大きいものはすべて、データベース内の参照とともにディスクに保持するのが最適です。詳細: http://www.sqlite.org/intern-v-extern-blob.html
操作ごとに1MBの制限があります。 (これが行ごとなのか、SQLiteクエリの場合は列ごとなのかわかりません)。この制限は、SQLiteAPIがバインダー/パーセルIPCシステムを介してアウトプロセスでsqliteと対話するためです。同じ制限がバンドル内の値に適用されます(たとえば、インテントエクストラ)。
バインダートランザクションバッファーの固定サイズは制限されており、現在は1Mbであり、プロセスで進行中のすべてのトランザクションで共有されます。
参照: http://developer.Android.com/reference/Android/os/TransactionTooLargeException.html
AndroidのBLOBサポートはまだ実装されていないようです...
http://www.basic4ppc.com/forum/basic4Android-updates-questions/6648-support-sqlite-blob.html
BLOBフィールドにはどのようなデータが格納されていますか?私は写真を推測します。
BLOBを使用しないことをお勧めします。バイナリデータには、ファイルシステムの方がはるかに適しています。
データベースで何を達成したいのか、もう少し説明していただけますか?
使用しているクエリは「選択中」と言っていますか?省略できますか?できない場合は、以下を使用していますか?
blob = rs.getBlob(column) ;
InputStream in = blob.getBinaryStream();
または
blob.getBytes(1, lengthOblob) ;
最初の方法では、blobをチャンクで読み取ることができます。 2つ目は、blobを一度にロードすることです。