22

インターネットからデータベースをダウンロードします。datasesフォルダーに保存して開きます。データベース内には、6つのフィールドを持つテーブル「Ads」があります。これらのフィールドのうち2つはBLOBです。このテーブルから読み取りたい場合...問題があります...1メガバイトを超えるblobフィールドを持つ行を読み取ると、例外が発生することに気付きました..."行からフィールドスロットを取得します0列0が失敗しました」。それが小さな塊なら、すべて大丈夫です...事前に感謝します:)

4

5 に答える 5

57

動的解凍により、内部アセットには1MBの制限があります。1MBの制限はカーソルブロブにも適用されるようですが、これはどこにも文書化されていないようです。

一般に、SQLiteのblobはパフォーマンスが低いため、避ける必要があります。代わりに、blobデータをファイルとして保存し、ファイルの場所をDBに保存します。

于 2011-05-12T17:12:07.530 に答える
12

SQLiteデータベースから100KB未満のBLOBを読み取る方が、ファイルシステムから読み取るよりも高速です。ただし、それよりも大きいものはすべて、データベース内の参照とともにディスクに保持するのが最適です。詳細:http ://www.sqlite.org/intern-v-extern-blob.html

于 2012-10-03T13:06:15.370 に答える
10

操作ごとに1MBの制限があります。(これが行ごとなのか、SQLiteクエリの場合は列ごとなのかわかりません)。この制限は、SQLiteAPIがバインダー/パーセルIPCシステムを介してアウトプロセスでsqliteと相互作用するためです。同じ制限がバンドル内の値に適用されます(たとえば、インテントエクストラ)。

バインダートランザクションバッファーの固定サイズは制限されており、現在は1Mbであり、プロセスで進行中のすべてのトランザクションで共有されます。

参照:http ://developer.android.com/reference/android/os/TransactionTooLargeException.html

于 2012-09-05T22:08:39.490 に答える
1

AndroidでのBLOBサポートはまだ実装されていないようです...

http://www.basic4ppc.com/forum/basic4android-updates-questions/6648-support-sqlite-blob.html

BLOBフィールドにはどのようなデータが保存されますか?私は写真を推測します。

BLOBを使用しないことをお勧めします。バイナリデータには、ファイルシステムの方がはるかに適しています。

データベースで何を達成したいのか、もう少し説明していただけますか?

于 2011-05-19T05:56:43.163 に答える
0

使用しているクエリは「selecting」と言っていますか?省略できますか?できない場合は、以下を使用していますか?

 blob = rs.getBlob(column) ;
 InputStream in = blob.getBinaryStream();

また

 blob.getBytes(1, lengthOblob) ;

最初の方法では、blobをチャンクで読み取ることができます。2つ目は、blobを一度にロードすることです。

于 2011-05-18T18:47:53.787 に答える