2011-03-23 104 views
14

我從互聯網上下載了一個數據庫。我將它保存在我的datase文件夾中,然後打開它。 在數據庫裏有一個包含6個字段的「廣告」表。這些字段中的2個是BLOB。當我想從這張表中讀取時......我遇到了一些問題......我注意到,當我讀取一個大於1兆字節的blob字段的行時,這會導致例外......「從行中獲取字段插槽0 col 0失敗「。如果它是一個小blob,一切都OK ......預先感謝:)Android中的光標大小限制SQLite數據庫

回答

39

由於動態解壓縮,內部資產的限制爲1MB; 1MB限制似乎也適用於Cursor blob,但這似乎沒有記錄在任何地方。

一般來說,你應該避免SQLite中的斑點,因爲它們表現不佳;而是將blob數據保存爲文件並將文件的位置存儲在數據庫中。

+1

通常,您應該避免SQLite中的斑點,因爲它們表現不佳;而是將blob數據保存爲文件並將文件的位置存儲在數據庫中。 --->非常感謝.. – 2011-05-18 04:50:18

+0

AndroidKid是正確的。我相信存在一個BLOB的用例,但是,我想不出一個。 :) – Jonathan 2011-05-19 06:02:55

1

您正在使用的查詢'選擇'說blob?你可以省略它嗎?如果你不能,你使用:

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

blob.getBytes(1, lengthOblob) ; 

第一種方法可以讓你在閱讀大塊的斑點。第二個將一次性加載blob。

+0

我不確定你是什麼意思的「一次加載」。假設'getBlob()'返回一個'byte []',數據已經存在於堆中...... – vaughandroid 2012-09-04 10:03:56

+4

假設你的'rs'是一個Cursor,那麼第一次調用getBlob()會導致大數據失敗,因爲光標窗口大小。 – sgibly 2015-03-27 19:18:48

1

看起來像Android的BLOB的支持尚未實現......

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

哪些數據存儲在BLOB字段?我會猜測圖片。

我會建議不要使用BLOBs。文件系統是二進制數據更好的選擇。

你能解釋一下你想用數據庫完成什麼嗎?

+0

更好的回答:不要在任何*數據庫中使用BLOB。RDBM不太適合存儲大量未格式化的數據 - 這就是文件系統的用途。 – 2011-05-19 05:58:56

+0

@David Souther感謝您的評論,你是對的。我想認爲BLOB對某些東西是有用的,這就是爲什麼我不那麼確定。但是,我想不出一個好的用例。存儲BluRay電影? (開玩笑) – Jonathan 2011-05-19 06:04:53

+1

這篇文章是從2007年開始的。BLOBs肯定是支持的,並且至少有1.6(API等級4,又名Donut)。 OP指出,問題在於BLOB值超過1MB。 – 2012-07-18 04:25:56

8

每個操作有1MB限制。 (我不確定這是每行還是每列在SQLite查詢的情況下)。這個限制是由於SQLite API與Binder/Parcel IPC系統上的out-of-process進程交互。相同的限制適用於Bundle中的值(例如,Intent extras)。

活頁夾事務緩衝器具有有限的固定大小,目前的1Mb, 其由所有交易在該過程進展共享。

參見:http://developer.android.com/reference/android/os/TransactionTooLargeException.html

+1

1 MB的限制是光標窗口的最大尺寸。這是用於存儲IPC傳輸結果行的內存緩衝區。窗口大小動態增長到這個限制。 – WindRider 2013-10-14 15:43:11

11

讀一個BLOB小於100KB從SQLite數據庫比從文件系統中讀取相同的速度。然而,任何比這更大的東西最好保存在磁盤上,並在db中引用。 更多於:http://www.sqlite.org/intern-v-extern-blob.html

+1

感謝您的參考。 – 2013-10-04 09:07:42

+1

@frederick nyawaya:什麼是最好的?將圖像/音頻作爲Blob存儲在數據庫中或僅存儲文件系統的路徑? – Ajay 2014-03-25 12:24:50

+0

@Ajay作爲文件系統的一部分 – 2014-03-29 09:39:49