In this video, I will explain how to store an image file (*.png) in the SQLite DataBase in an Android Studio. In this tutorial, I have stored the image in Binary Large Object (BLOB) format. The link to the source code is as below:
Code snipped for MainActivity.java:
package com.allcodingtutorials.imagesqlite;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
public class MainActivity extends AppCompatActivity {
TextView textView, textView1;
EditText editText;
ImageView imageView;
Button button;
MyDataBase DB;
String nameDB;
Bitmap imageDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textview);
textView1 = (TextView) findViewById(R.id.textview1);
editText = (EditText) findViewById(R.id.edittext);
imageView = (ImageView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
DB = new MyDataBase(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = editText.getText().toString();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.draw);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArray);
byte[] img = byteArray.toByteArray();
boolean insert = DB.insertdata(name, img);
if(insert==true){
Toast.makeText(MainActivity.this, "Data Saved", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "Data Not Saved",
Toast.LENGTH_SHORT).show();
}
imageDB = DB.getImage(name);
nameDB = DB.getName(name);
imageView.setImageBitmap(imageDB);
textView1.setText("The name entered by you is \n\n" + nameDB);
} }); } }
Code snipped for MyDataBase.java:
package com.allcodingtutorials.imagesqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import androidx.annotation.Nullable;
public class MyDataBase extends SQLiteOpenHelper {
public MyDataBase(Context context) {
super(context, "name.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table tableimage (name text, image blob);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("drop table if exists tableimage");
}
public boolean insertdata(String username, byte[] img){
SQLiteDatabase MyDB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", username);
contentValues.put("image", img);
long ins = MyDB.insert("tableimage", null, contentValues);
if(ins==-1) return false;
else return true;
}
public String getName(String name){
SQLiteDatabase MyDB = this.getWritableDatabase();
Cursor cursor = MyDB.rawQuery("Select * from tableimage where name = ?", new String[]{name});
cursor.moveToFirst();
return cursor.getString(0);
}
public Bitmap getImage(String name){
SQLiteDatabase MyDB = this.getWritableDatabase();
Cursor cursor = MyDB.rawQuery("Select * from tableimage where name = ?", new String[]{name});
cursor.moveToFirst();
byte[] bitmap = cursor.getBlob(1);
Bitmap image = BitmapFactory.decodeByteArray(bitmap, 0 , bitmap.length);
return image;
}
}
Code snipped for main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter your name"
android:textSize="24dp"/>
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:layout_below="@id/textview"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:layout_below="@+id/edittext"
android:text="Save"/>
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button"
android:textSize="24dp"
android:layout_centerHorizontal="true"
android:textAlignment="center"/>
<ImageView
android:id="@+id/image"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_below="@id/textview1"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
Sir i have a doubt .... in your code u r getting image directly from drawable.. what i have done is i have created user input image. User provide image .. so my question is instead of R.drawable.draw , what should i write?
Thanks in advance..