Retrieve Image From Drawable Folder and Store in Sqlite Database in Android

Introduction

 
This article explains how to store an image in an SQLite Database in Android.
 
This application gets the image from the drawable folder and stores it into a database using an SQLite Database.
 
Step 1
 
Create a project like this:
 
SqlkiteStorage
 
Step 2
 
Create an XML file with the following.
 
In this XML file you will use an ImageView in which you set the image after getting it from the drawable folder.
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     tools:context=".MainActivity" >"  
  10.    
  11. <ImageView  
  12.     android:layout_width="fill_parent"  
  13.     android:layout_height="fill_parent"  
  14.     android:id="@+id/imageView"></ImageView>  
  15. </RelativeLayout> 
Step 3
 
Create a Java class file with the following.
  1. package com.imagestorage;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.ContentValues;  
  7. import android.content.Context;  
  8. import android.database.Cursor;  
  9. import android.database.sqlite.SQLiteDatabase;  
  10. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  11. import android.database.sqlite.SQLiteOpenHelper;  
  12. import android.graphics.Bitmap;  
  13. import android.graphics.BitmapFactory;  
  14. import android.os.Bundle;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.widget.Button;  
  18. import android.widget.EditText;  
  19. import android.widget.ImageView;  
  20. import android.widget.TextView;  
  21.   
  22. public class MainActivity extends Activity   
  23. {  
  24.   
  25.  /* This is my MainActivity class which extends the Activity class. Activity class provides the onCreate() method so when you run your application your compiler first goes to this method to create the activity. setContentView() method is used to set the layout in your activty. */  
  26.  /** Called when the activity is first created. */  
  27.  MyDataBase myDataBase;  
  28.  SQLiteDatabase database;  
  29.  Cursor c;  
  30.  ImageView imageView;  
  31.  byte[] img, img1;  
  32.  Bitmap b;  
  33.   
  34.  @Override  
  35.  public void onCreate(Bundle savedInstanceState)   
  36.  {  
  37.   super.onCreate(savedInstanceState);  
  38.   setContentView(R.layout.activity_main);  
  39.   ImageView imageView = (ImageView) findViewById(R.id.imageView);  
  40.   myDataBase = new MyDataBase(getApplicationContext(), "imagedata"null1);  
  41.   
  42.   // this.deleteDatabase("imagedata");  
  43.   
  44.   /*Bitmap is a binary representation in which a bit or a set of bits correspond to some part of an object such as an image. Here we use the Bitmap class which is provided by the Android system to hold the image. Here I have created the object of Bitmap class to hold the image. bitmap Factory class is used to create the object from various resources including files, streams and byteArrays.      */  
  45.   
  46.   Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);  
  47.   ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  48.   bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);  
  49.   byte[] img = bos.toByteArray();  
  50.   
  51.   //getWritebleDatabese() method is used to perform write operation into the database  
  52.   database = myDataBase.getWritableDatabase();  
  53.   
  54.   // content values is used to create empty set of values using the default initial size  
  55.   ContentValues cv = new ContentValues();  
  56.   cv.put("image", img);  
  57.   database.insert("tableimage"null, cv);  
  58.   String selectQuery = "SELECT * FROM tableimage";  
  59.   c = database.rawQuery(selectQuery, null);  
  60.   if (c != null)   
  61.   {  
  62.    c.moveToFirst();  
  63.    do   
  64.    {  
  65.     img1 = c.getBlob(c.getColumnIndex("image"));  
  66.    } while (c.moveToNext());  
  67.   }  
  68.   Bitmap b1 = BitmapFactory.decodeByteArray(img1, 0, img1.length);  
  69.   imageView.setImageBitmap(b1);  
  70.  }  
  71. }  
  72.   
  73. // Mydatabase class is used to create the database by extending the SqliteopenHelper class which provides onCrate() and onUpGrade() method.  
  74. class MyDataBase extends SQLiteOpenHelper   
  75. {  
  76.  public MyDataBase(Context context, String name, CursorFactory factory, int version)   
  77.   {  
  78.   super(context, name, factory, version);  
  79.   // TODO Auto-generated constructor stub  
  80.  }  
  81.   
  82.  public void onCreate(SQLiteDatabase db)   
  83.  {  
  84.   // TODO Auto-generated method stub  
  85.   db.execSQL("create table tableimage (image blob);");  
  86.  }  
  87.   
  88.  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)   
  89.  {  
  90.   // TODO Auto-generated method stub  
  91.   
  92.  }  
Step 4
 
Android Manifest.xml file
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.imagestorage"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.     <uses-sdk  
  7.         android:minSdkVersion="8"  
  8.         android:targetSdkVersion="18" />  
  9.     <application  
  10.         android:allowBackup="true"  
  11.         android:icon="@drawable/ic_launcher"  
  12.         android:label="@string/app_name"  
  13.         android:theme="@style/AppTheme" >  
  14.         <activity  
  15.             android:name="com.imagestorage.MainActivity"  
  16.             android:label="@string/app_name" >  
  17.             <intent-filter>  
  18.                 <action android:name="android.intent.action.MAIN" />  
  19.                 <category android:name="android.intent.category.LAUNCHER" />  
  20.             </intent-filter>  
  21.         </activity>  
  22.     </application>  
  23. </manifest> 
Step 5
 
You can see your stored image in the SQLite database in such a way  
 
Go to the Files Explorer then select "Data" -> "Data" then go to "YourDataBase" and click on your database name.
 
 
Click on "Data".
 
 
Go to your database name.
 
 
Output