How to store(bitmap image) and retrieve image from sqlite database in android? [closed] How to store(bitmap image) and retrieve image from sqlite database in android? [closed] android android

How to store(bitmap image) and retrieve image from sqlite database in android? [closed]


Setting Up the database

public class DatabaseHelper extends SQLiteOpenHelper {    // Database Version    private static final int DATABASE_VERSION = 1;    // Database Name    private static final String DATABASE_NAME = "database_name";    // Table Names    private static final String DB_TABLE = "table_image";    // column names    private static final String KEY_NAME = "image_name";    private static final String KEY_IMAGE = "image_data";    // Table create statement    private static final String CREATE_TABLE_IMAGE = "CREATE TABLE " + DB_TABLE + "("+                        KEY_NAME + " TEXT," +                        KEY_IMAGE + " BLOB);";    public DatabaseHelper(Context context) {        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    @Override    public void onCreate(SQLiteDatabase db) {        // creating table        db.execSQL(CREATE_TABLE_IMAGE);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // on upgrade drop older tables        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);        // create new table        onCreate(db);    }}

Insert in the Database:

public void addEntry( String name, byte[] image) throws SQLiteException{    SQLiteDatabase database = this.getWritableDatabase();    ContentValues cv = new  ContentValues();    cv.put(KEY_NAME,    name);    cv.put(KEY_IMAGE,   image);    database.insert( DB_TABLE, null, cv );}

Retrieving data:

 byte[] image = cursor.getBlob(1);

Note:

  1. Before inserting into database, you need to convert your Bitmap image into byte array first then apply it using database query.
  2. When retrieving from database, you certainly have a byte array of image, what you need to do is to convert byte array back to original image. So, you have to make use of BitmapFactory to decode.

Below is an Utility class which I hope could help you:

public class DbBitmapUtility {    // convert from bitmap to byte array    public static byte[] getBytes(Bitmap bitmap) {        ByteArrayOutputStream stream = new ByteArrayOutputStream();        bitmap.compress(CompressFormat.PNG, 0, stream);        return stream.toByteArray();    }    // convert from byte array to bitmap    public static Bitmap getImage(byte[] image) {        return BitmapFactory.decodeByteArray(image, 0, image.length);    }}


Further reading
If you are not familiar how to insert and retrieve into a database, go through this tutorial.


If you are working with Android's MediaStore database, here is how to store an image and then display it after it is saved.

on button click write this

 Intent in = new Intent(Intent.ACTION_PICK,                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);            in.putExtra("crop", "true");            in.putExtra("outputX", 100);            in.putExtra("outputY", 100);            in.putExtra("scale", true);            in.putExtra("return-data", true);            startActivityForResult(in, 1);

then do this in your activity

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        // TODO Auto-generated method stub        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == 1 && resultCode == RESULT_OK && data != null) {            Bitmap bmp = (Bitmap) data.getExtras().get("data");            img.setImageBitmap(bmp);            btnadd.requestFocus();            ByteArrayOutputStream baos = new ByteArrayOutputStream();            bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);            byte[] b = baos.toByteArray();            String encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);            byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);            Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0,                    bytarray.length);        }    }