{"id":200,"date":"2017-04-10T12:43:25","date_gmt":"2017-04-10T12:43:25","guid":{"rendered":"http:\/\/abhiandroid.com\/database\/?p=200"},"modified":"2019-06-17T05:19:14","modified_gmt":"2019-06-17T05:19:14","slug":"add-retrieve-image-sqlite-database-example-android-studio","status":"publish","type":"post","link":"https:\/\/abhiandroid.com\/database\/add-retrieve-image-sqlite-database-example-android-studio.html","title":{"rendered":"Add &#038; Retrieve Image From SQLite Database Example In Android Studio"},"content":{"rendered":"<p>In this article we are going to discuss about how to add or retrieve image from phone external storage to application using SQLite Database. Basically we create a database and a table in the application using SQLite. The table will hold the image which is fetched from external storage.<\/p>\n<p>There is a difference while retrieving with different API level. The permission concept has changed since API 23. Before API level 23 the user was asked during installation and after API level 23 the user is asked during runtime. So, an additional runtime permission is added in the application operating over the API level above 23.<\/p>\n<p>Here are both ways explained\u00a0step by step\u00a0to add or retrieve image from SQLite database.<\/p>\n<hr \/>\n<h4><strong>Example 1: Adding and Retrieving Image From SQLite Database (Below API LEVEL 23)<\/strong><\/h4>\n<p>In this example we used buttons and imageview for creating UI, on button onclick is added and methods are defined in corresponding java class.<\/p>\n<p style=\"text-align: center;\"><a class=\"download\" href=\"http:\/\/www.mediafire.com\/file\/qcd085sqiivb1w2\/SqliteImageDemo.zip\/file\" target=\"_blank\" rel=\"nofollow\">Download Code<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-134\" src=\"\/database\/wp-content\/uploads\/2017\/03\/Adding-Or-Retrieving-Image-Using-SQLite.gif\" alt=\"Adding Or Retrieving Image Using SQLite\" width=\"160\" height=\"321\" \/><\/p>\n<p><span style=\"color: #008000;\"><strong>Step 1:<\/strong><\/span> Create a new project and name it <span style=\"color: #008000;\">SqliteImageDemo<\/span>.<\/p>\n<p><strong><span style=\"color: #008000;\">Step 2:<\/span><\/strong>Open <span style=\"color: #008000;\">AndroidManifest.xml<\/span> file and add permission to access external storage.<\/p>\n<pre>&lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\r\n&lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" \/&gt;\r\n<\/pre>\n<p><strong><span style=\"color: #008000;\">Step 3:<\/span><\/strong>Open <span style=\"color: #008000;\">res -&gt; layout -&gt; activity_main.xml (or) main.xml<\/span> and add following code:<\/p>\n<p>In this code simply add imageview and button with onclick functionality.<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:id=\"@+id\/activity_main\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    tools:context=\"com.example.sqliteimagedemo.MainActivity\"&gt;\r\n\r\n    &lt;Button\r\n        android:text=\"@string\/get_image\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginTop=\"19dp\"\r\n        android:id=\"@+id\/button\"\r\n        android:layout_alignParentTop=\"true\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\"\r\n        android:onClick=\"save\"\/&gt;\r\n\r\n    &lt;Button\r\n        android:text=\"@string\/view_image\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginTop=\"29dp\"\r\n        android:id=\"@+id\/button2\"\r\n        android:layout_below=\"@+id\/button\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\"\r\n        android:onClick=\"get\"\/&gt;\r\n\r\n    &lt;ImageView\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        app:srcCompat=\"@mipmap\/ic_launcher\"\r\n        android:id=\"@+id\/imageView\"\r\n        android:layout_below=\"@+id\/button2\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\"\r\n        android:layout_marginTop=\"43dp\"\r\n        tools:ignore=\"ContentDescription\" \/&gt;\r\n&lt;\/RelativeLayout&gt;\r\n<\/pre>\n<p><span style=\"color: #008000;\"><strong>Step 4:<\/strong> <\/span>Open <span style=\"color: #008000;\">src -&gt; package -&gt; MainActivity.java<\/span><\/p>\n<p>In this step we open MainActivity and add the functions defined over button onclick i.e save or get. The save method contain FileInputStream to get file from the defined path and save it to the database. Further the image is inserted into the table using SQLiteDatabase, Toast is used to indicate the operation is completed. The get method uses SQLite select statement to retrieve the saved image and displaying it in the imageview.<\/p>\n<pre>package com.example.sqliteimagedemo;\r\n\r\nimport android.content.ContentValues;\r\nimport android.content.Context;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.ImageView;\r\nimport android.widget.Toast;\r\nimport java.io.FileInputStream;\r\nimport java.io.IOException;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n    ImageView imageView;\r\n    SQLiteDatabase db;\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n        imageView = (ImageView) findViewById(R.id.imageView);\r\n        \/\/database created\r\n        db = this.openOrCreateDatabase(\"test.db\", Context.MODE_PRIVATE,null);\r\n        \/\/table created\r\n        db.execSQL(\"create table if not exists imageTb ( a blob )\");\r\n    }\r\n       \r\n    public  void save(View view) throws IOException {\r\n        FileInputStream fis = new FileInputStream(\"\/storage\/sdcard\/demoImage.jpg\");\r\n        byte[] image= new byte[fis.available()];\r\n        fis.read(image);\r\n        ContentValues values = new ContentValues();\r\n        values.put(\"a\",image);\r\n        db.insert(\"imageTb\", null,values);\r\n        fis.close();\r\n        Toast.makeText(this,\"Done\", Toast.LENGTH_SHORT).show();\r\n    }\r\n    public void get(View view) {\r\n        Cursor c = db.rawQuery(\"select * from imageTb\", null);\r\n        if(c.moveToNext())\r\n        {\r\n            byte[] image = c.getBlob(0);\r\n            Bitmap bmp= BitmapFactory.decodeByteArray(image, 0 , image.length);\r\n            imageView.setImageBitmap(bmp);\r\n            Toast.makeText(this,\"Done\", Toast.LENGTH_SHORT).show();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Output:<\/strong><\/p>\n<p>Now run the app and\u00a0click on the button to add and retrieve the image in App.<\/p>\n<hr \/>\n<h4><strong>Example 2: Adding and Retrieving Image From SQLite Database(Above API LEVEL 23)<\/strong><\/h4>\n<p>In this example we used buttons and imageview for creating UI, on button onclick is added and methods are defined in corresponding java class. The basic difference is that we need to define the permissions at the run time.<\/p>\n<p style=\"text-align: center;\"><a class=\"download\" href=\"http:\/\/www.mediafire.com\/file\/dg3s3wjix5a273b\/SqliteImageDemo1.zip\/file\" target=\"_blank\" rel=\"nofollow\">Download Code<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-137\" src=\"\/database\/wp-content\/uploads\/2017\/03\/Adding-Or-Retrieving-Image-Example-Using-SQLite.gif\" alt=\"Adding Or Retrieving Image Example Using SQLite\" width=\"176\" height=\"287\" \/><br \/>\n<span style=\"color: #008000;\"><strong>Step 1:<\/strong><\/span> Create a new project and name it <span style=\"color: #008000;\">SqliteImageDemo<\/span>.<br \/>\n<strong><span style=\"color: #008000;\">Step 2:<\/span><\/strong>Open <span style=\"color: #008000;\">AndroidManifest.xml<\/span> file and add permission to access external storage.<\/p>\n<pre>&lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\r\n&lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" \/&gt;\r\n<\/pre>\n<p><strong><span style=\"color: #008000;\">Step 3:<\/span><\/strong>Open <span style=\"color: #008000;\">res -&gt; layout -&gt; activity_main.xml (or) main.xml<\/span> and add following code:<br \/>\nIn this code simply add imageview and button with onclick functionality.<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:id=\"@+id\/activity_main\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    tools:context=\"com.example.sqliteimagedemo.MainActivity\"&gt;\r\n\r\n    &lt;ImageView\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        app:srcCompat=\"@mipmap\/ic_launcher\"\r\n        android:layout_marginTop=\"61dp\"\r\n        android:id=\"@+id\/imageView\"\r\n        android:layout_below=\"@+id\/button1\"\r\n        android:layout_alignLeft=\"@+id\/button1\"\r\n        android:layout_alignStart=\"@+id\/button1\" \/&gt;\r\n\r\n    &lt;Button\r\n        android:text=\"VIEW  FETCHED IMAGE\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:id=\"@+id\/button2\"\r\n        android:onClick=\"viewImage\"\r\n        android:layout_below=\"@+id\/button1\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\" \/&gt;\r\n\r\n    &lt;Button\r\n        android:text=\"FETCH IMAGE FROM EXTERNAL STORAGE\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:id=\"@+id\/button1\"\r\n        android:onClick=\"fetchImage\"\r\n        android:layout_alignParentTop=\"true\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\" \/&gt;\r\n\r\n&lt;\/RelativeLayout&gt;\r\n<\/pre>\n<p><span style=\"color: #008000;\"><strong>Step 4:<\/strong> <\/span>Open <span style=\"color: #008000;\">src -&gt; package -&gt; MainActivity.java<\/span><\/p>\n<p>In this step we open MainActivity and add the functions defined over button onclick i.e save or get. The save method contain FileInputStream to get file from the defined path and save it to the database. Further the image is inserted into the table using SQLiteDatabase, Toast is used to indicate the operation is completed. The get method uses SQLite select statement to retrieve the saved image and displaying it in the imageview.<\/p>\n<p>In addition to previous API a statement is added that is basically a permission to read\/write external storage.<\/p>\n<pre>package com.example.sqliteimagedemo;\r\n\r\nimport android.Manifest;\r\nimport android.content.ContentValues;\r\nimport android.content.Context;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.os.Environment;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.ImageView;\r\nimport android.widget.Toast;\r\nimport java.io.File;\r\nimport java.io.FileInputStream;\r\nimport java.io.IOException;\r\n\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n   \r\n    private int STORAGE_PERMISSION_CODE = 23;\r\n    ImageView imageView;\r\n    SQLiteDatabase db;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n        \/\/Permission to access external storage\r\n        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE);\r\n        imageView = (ImageView) findViewById(R.id.imageView);\r\n        \/\/creating database\r\n        db = this.openOrCreateDatabase(\"test.db\", Context.MODE_PRIVATE,null);\r\n        \/\/creating table for storing image\r\n        db.execSQL(\"create table if not exists imageTb ( image blob )\");\r\n    }\r\n\r\n    public void viewImage(View view)\r\n    {\r\n        Cursor c = db.rawQuery(\"select * from imageTb\", null);\r\n        if(c.moveToNext())\r\n        {\r\n            byte[] image = c.getBlob(0);\r\n            Bitmap bmp= BitmapFactory.decodeByteArray(image, 0 , image.length);\r\n            imageView.setImageBitmap(bmp);\r\n            Toast.makeText(this,\"Done\", Toast.LENGTH_SHORT).show();\r\n        }\r\n    }\r\n\r\n    public  void fetchImage(View view) throws IOException {\r\n\r\n        File folder= new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + \"\/demoImage.jpg\/\");\r\n        FileInputStream fis = new FileInputStream(folder);\r\n        byte[] image= new byte[fis.available()];\r\n        fis.read(image);\r\n        ContentValues values = new ContentValues();\r\n        values.put(\"image\",image);\r\n        db.insert(\"imageTb\", null,values);\r\n        fis.close();\r\n        Toast.makeText(this,\"Image Fetched\", Toast.LENGTH_SHORT).show();\r\n    }\r\n}<\/pre>\n<p><strong>Output:<\/strong><\/p>\n<p>Now run the app and\u00a0click on the button to add and retrieve the image in App.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article we are going to discuss about how to add or retrieve image from phone external storage to application using SQLite Database. Basically we create a database and a table in the application using SQLite. The table will hold the image which is fetched from external storage. There is a difference while retrieving &hellip; <a href=\"https:\/\/abhiandroid.com\/database\/add-retrieve-image-sqlite-database-example-android-studio.html\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Add &#038; Retrieve Image From SQLite Database Example In Android Studio<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-200","post","type-post","status-publish","format-standard","hentry","category-archive"],"acf":[],"psp_head":"<title>Add &amp; Retrieve Image From SQLite Database Example In Android Studio \u2013 Android Database Tutorial In Android Studio: Store Your Data<\/title>\r\n<meta name=\"description\" content=\"Here is the step by step example of how to add or retrieve image from phone external storage to application using SQLite Database in Android Studio.\" \/>\r\n<meta name=\"robots\" content=\"index,follow\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/abhiandroid.com\/database\/add-retrieve-image-sqlite-database-example-android-studio.html\" \/>\r\n","_links":{"self":[{"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/posts\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":3,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"predecessor-version":[{"id":350,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/posts\/200\/revisions\/350"}],"wp:attachment":[{"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abhiandroid.com\/database\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}