歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 數據庫存取圖片

Android 數據庫存取圖片

日期:2017/3/1 9:57:42   编辑:Linux編程

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

一、數據庫創建和存取方法:

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

二、將圖片轉化為 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();

}

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved