2011-06-07 139 views
2

我有一個數據庫,裏面有一些圖像,保存爲BLOB。 我沒有與數據庫中的任何問題,到現在爲止,我嘗試檢索BLOB,我會與任何其他數據做的,但它不工作:從SQLite數據庫檢索BLOB android

Cursor c = mDb.query(" ... "); 
c.moveToFirst(); 

ByteArrayInputStream inputStream = new ByteArrayInputStream(c.getBlob(0)); 
Bitmap b = BitmapFactory.decodeStream(inputStream); 

的問題是,我得到一個異常時,程序試圖獲取「c.getBlob(0)」的信息。它也不適用於「byte [] b = c.getBlob(0)」。

可能的原因:

  • 文件過大? (1.2Mb)
  • 我還得做別的事情來配置它的那種BLOB嗎?

謝謝!


解決:當我不小心嘗試與其他文件的工作!然後我意識到這個文件比較小(小於1Mb),所以問題看起來很大。

現在我的問題是,我可以配置它使BLOB支持大文件?

謝謝!

+0

你有什麼例外? – 2011-06-07 02:02:54

+0

這有點奇怪,我得到︰ ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,Intent) 它只是在調用現在的步驟:c.getBlob(c.getColumnIndex(「data」)) – 2011-06-07 10:05:54

回答

5

在嘗試檢索任何內容之前,您是否驗證過光標中是否存在實際的數據?

if(c.getCount() > 0){do something}

如果你不要做到這一點,那麼你會試圖檢索的東西,已經是空這是一個BIG NO NO

還做你的元素獲取時它很好的做法來獲取這樣的:c.getBlob(0)

其他信息

原因是因爲如果你決定改變你的列並改變順序,這會嚴重地咬你。

我的建議是有存在於一個輔助類的靜態變量引用您已經定義了這樣這樣的列名:

c.getString(c.getColumnIndex(String columnName))

這是更好的做法,你可以很容易地更改數據庫通過參考名稱。

在這裏閱讀我的文章,瞭解如何處理數據庫並間接調用數據庫。你會感激所有你會避免的頭痛。

入住這裏:Storing Lists to A Database, and Retrieving Them All Together : Android

還發布提問時,對錯誤的logcat的幫助解決問題更快。

+0

嗨,非常感謝你的答案。 正如你所說,我改變了我訪問數據的方式。 而當我得到c.getCount()它返回我1,所以實際上有數據要檢索裏面。 謝謝! – 2011-06-07 09:38:54

+1

@AdamSchmit不要忘記接受答案,如果它解決了你的問題。 – JoxTraex 2013-03-08 18:00:48