2016/06/03

Android Bitmap 與 SQLite Blob 欄位之間的存取

在 Android 開發需求中,

有時會遇到想將 Picture 儲存到 SQLite Blob 欄位內,

其中原理就是: 資料必須先轉換成 byte[], 才能儲存到 Blob 欄位, 如下圖 :


範例 1: 如何將 Bitmap 寫入到 SQLite Blob 欄位
 程式碼
// 1.先將 Bitmap 轉換成 byte[]
ByteArrayOutputStream bos = new ByteArrayOutputStream();
vBitmap.compress( Bitmap.CompressFormat.JPEG, 100, bos );
byte[] vByteArray = bos.toByteArray();

// 2.透過 byte[] 儲存到 blob 欄位
ContentValues cv = new ContentValues();
cv.put( "blobColumnName", vByteArray );

// 3.db 儲存
SQLiteDatabase db = this.getWritableDatabase();
long cnt = db.insert( "tableName", null, cv );
long cnt = db.update( "tableName", cv, vWhereCondition, null );

範例 2: 如何讀取 SQLite Blob 欄位資料, 轉換成 Bitmap
 程式碼
// 1.先透過 DB Cursor 讀取 Blob 欄位資料, 存放到 bytep[]
byte[] vByteArray = vCursor.getBlob( blob_column_index );

// 2.將 byte[] 轉換成 Bitmap
Bitmap vBitmap = BitmapFactory.decodeByteArray( vByteArray
                                              , 0
                                              , vByteArray.length
                                              );