有時候咱們想把圖片存入到數據庫中,儘管這不是一種明智的選擇,但有時候仍是不得以會用到,下面說說將圖片轉換成byte[]數組存入到數據庫中去,並從數據庫中取出來轉換成圖像顯示出來。 java
首先,咱們要把圖片存入到數據庫中,首先要建立一個數據庫, 以下所示: android
package com.android.test; import java.io.ByteArrayOutputStream; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.provider.BaseColumns; public class PictureDatabase extends SQLiteOpenHelper { //數據庫的字段 public static class PictureColumns implements BaseColumns { public static final String PICTURE = "picture"; } private Context mContext; //數據庫名 private static final String DATABASE_NAME = "picture.db"; //數據庫版本號 private static final int DATABASE_Version = 1; //表名 private static final String TABLE_NAME = "picture"; //建立數據庫 public PictureDatabase (Context context) { super(context, DATABASE_NAME, null, DATABASE_Version); this.mContext = context; } //建立表並初始化表 @Override public void onCreate (SQLiteDatabase db) { String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID + " integer primary key autoincrement," + PictureColumns.PICTURE + " blob not null);"; db.execSQL(sql); //初始化 initDataBase(db,mContext); } //將轉換後的圖片存入到數據庫中 private void initDataBase (SQLiteDatabase db, Context context) { Drawable drawable = context.getResources().getDrawable(R.drawable.test_icon_resizer); ContentValues cv = new ContentValues(); cv.put(PictureColumns.PICTURE, getPicture(drawable)); db.insert(TABLE_NAME, null, cv); } //將drawable轉換成能夠用來存儲的byte[]類型 private byte[] getPicture(Drawable drawable) { if(drawable == null) { return null; } BitmapDrawable bd = (BitmapDrawable) drawable; Bitmap bitmap = bd.getBitmap(); ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, os); return os.toByteArray(); } //更新數據庫 @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } }