Android數據庫中存取圖片一般使用兩種方式,一種是保存圖片所在路徑,二是將圖片以二進制的形式存儲(sqlite3支持BLOB數據類型)。對於兩種方法的使用,好像第二種方法不如第一種方法更受程序員歡迎,他們認爲,在不少數據庫語言裏,處理大字段都是不容易的,像圖片這樣的文件放在數據庫裏會有問題:對數據庫的讀寫速度永遠趕不上文件系統的處理速度,使數據庫變得巨大;但也有不少人認爲像圖片這樣的數據存放在數據庫中也有好處:易於備份,且備份速度絕對比備份文件快,比較容易數據遷移等等。其實這兩種方法都有優缺點,具體使用哪一種方法要視狀況而定。我的傾向於使用數據庫存取圖片,由於我的認爲存到數據庫裏的數據不會因外部數據的變化而丟失改變,好比你拍照得到一張圖片,若是是將路徑存到數據庫,當這張照片被刪除以後,下次讀取數據庫就得不到想要的結果了。接下來詳細介紹數據庫存取圖片的方法:程序員
1.從資源中獲取Bitmap對象sql
1 Resources res = getResources(); 2 Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);
2.把圖片轉換成字節數據庫
1 public byte[] img(int id) 2 { 3 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 4 Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap(); 5 bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 6 return baos.toByteArray(); 7 }
3.在數據庫中插入圖片spa
//在數據庫建立時,圖片字段的數據類型存儲爲 BLOB數據庫插入操做 public void onCreate(SQLiteDatabase db) { String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) "; db.execSQL(sql); } //將圖片一字節形式存儲數據庫讀取操做 public long insert(byte[] img) { SQLiteDatabase db = getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(IMAGE, img); long result = db.insert(TB_NAME, null, cv); return result; }
4.獲取存入數據庫的圖片(Bitmap)code
public Bitmap getBmp(int position) { SQLiteDatabase db = getReadableDatabase(); Cursor cursor = select(TB_NAME); cursor.moveToPosition(position); byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE)); Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length); return bmpout; }
//imgView.setImageBitmap(bm);orm
5.轉換獲取的圖片(Bitmap)爲Drawablesqlite
1 public Drawable chage_to_drawable(Bitmap bp) 2 { 3 //由於BtimapDrawable是Drawable的子類,最終直接使用bd對象便可。 4 Bitmap bm=bp; 5 BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 6 return bd; 7 }