Android用LitePal操作數據庫存取圖片

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

1、把圖片轉換為字節

private byte[]img(Bitmap bitmap){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

2、把圖片存儲到數據庫

假設獲取的圖片為bitmap

數據庫有一張User表,存儲的屬性為byte[]headshot

public class User extends DataSupport {

private byte[] headshot;//頭像

public User(){
super();
}

public User(byte[]headshot){
super();
this.headshot=headshot;
}
public byte[] getHeadshot() {
        return headshot;
    }

    public void setHeadshot(byte[] headshot) {
        this.headshot = headshot;
    }
}

對圖片進行保存

//獲取到圖片
Bitmap headShot=BitmapFactory.decodeFile(imagePath);
//把圖片轉換字節流
byte[]images=img(headShot);
//找到用戶
User users=DataSupport.findFirst(User.class);
//保存
users.setHeadshot(images);
users.save();

4、獲取圖片

User mUser=DataSupport.findFrist(User.class);
byte[]images=mUser.getHeadshot();
Bitmap bitmap=BitmapFactory.decodeByteArray(images,0,images.length);

好瞭,到此完成對數據庫存取圖片

You May Also Like