Android sqlite 存取圖片

數據庫中存取圖片一般使用兩種方式,一種是保存圖片所在路徑,二是將圖片以二進制的形式存儲(sqlite3支持BLOB數據類型)。對於兩種方法的使用,好像第二種方法不如第一種方法更受程序員歡迎,他們認爲,在不少數據庫語言裏,處理大字段都是不容易的,像圖片這樣的文件放在數據庫裏會有問題:對數據庫的讀寫速度永遠趕不上文件系統的處理速度,使數據庫變得巨大;但也有不少人認爲像圖片這樣的數據存放在數據庫中也有好處:易於備份,且備份速度絕對比備份文件快,比較容易數據遷移等等。其實這兩種方法都有優缺點,具體使用哪一種方法要視狀況而定。我的傾向於使用數據庫存取圖片,由於我的認爲存到數據庫裏的數據不會因外部數據的變化而丟失改變,好比你拍照得到一張圖片,若是是將路徑存到數據庫,當這張照片被刪除以後,下次讀取數據庫就得不到想要的結果了。接下來詳細介紹數據庫存取圖片的方法:

1、數據庫建立和存取方法:

在數據庫建立時,圖片字段的數據類型存儲爲 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;
}


獲得的圖片是Bitmap類型,參數position 點擊圖片在ListView、GridView等內的位置 ,可根據須要編寫代碼二
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;
}

2、將圖片轉化爲 byte[]//參數id爲圖片資源 (R.drawable.img)
public byte[] img(int id)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();

} 程序員

轉載請註明出處:http://blog.csdn.net/zjbpku/article/details/8877524 sql

相關文章
相關標籤/搜索