KeyValuePair Database / Serialisation of object/ Deserialisation of object /Store class object in sqlite database
Hi Guys, Here is the demo of how you can create database which can store whole Object (any type of object like class,string,int object) in Database. You can easily store, retrieve and delete stored object. You can use this type of database in any king of application. Get rid of multiple tables, keys just a single table with keyvalue pair.
This kind of database you can easily use when need to store multiple fields in database. You don't need to worry about all fields of tables. Just your class modal or pojo class is do all the things. Using object Serialization and Deserialization we store data in database
This kind of database you can easily use when need to store multiple fields in database. You don't need to worry about all fields of tables. Just your class modal or pojo class is do all the things. Using object Serialization and Deserialization we store data in database
So let's see step by step process to create KeyValuePair sqlite database.
STEP : 1 Create Database Helper class
package com.example.chirag.databasedemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Hashtable; /** * Created by chirag on 6/2/18. */ public class KeyValueHelper extends SQLiteOpenHelper { private static final String DB_NAME = "KEYVALUE",TABLE="alldata",KEY="key",VALUE = "value"; private static final String TABLE_CREATE = "CREATE TABLE "+TABLE+" ("+KEY+" VARCHAR,"+VALUE+" BLOB);"; private static Hashtable<String,Object> memTable = new Hashtable<>(); public KeyValueHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); if(memTable == null) { memTable = new Hashtable<>(); } } public KeyValueHelper(Context context) { super(context, DB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void setValue(String key, Object value) { delete(key); ContentValues cv = null; try { cv = new ContentValues(); cv.put(KEY, key); cv.put(VALUE, serializeObject(value)); } catch (Exception e) { e.printStackTrace(); } SQLiteDatabase db = this.getWritableDatabase(); db.insert(TABLE,null,cv); db.close(); } public <T> T getValue(String key,Class<T> type) { SQLiteDatabase db = this.getReadableDatabase(); Cursor c = db.rawQuery("SELECT "+VALUE+" FROM "+TABLE+" WHERE "+KEY+"=?;", new String[]{key}); T ret = getNullFor(type); if (c.moveToNext()) { try { ret = type.cast(deserializeObject(c.getBlob(c.getColumnIndex(VALUE)))); } catch(Exception e){ e.printStackTrace(); } } c.close(); return ret; } private <T> T getNullFor(Class<T> type) { if(type.equals(Integer.class)) { return (T) new Integer(0); } else if(type.equals(Boolean.class)) { return (T) new Boolean(false); } return null; } public void delete(String key) { SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("DELETE FROM "+TABLE+" WHERE "+KEY+"=?;",new String[]{key}); db.close(); } public void deleteLike(String pattern) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE,KEY+" LIKE ?", new String[]{pattern+"%"}); db.close(); } public static Object deserializeObject(byte[] bytes) { try { ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); return ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } public static byte[] serializeObject(Object object) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(object); return baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } return null; } }
STEP : 2 Create UserInfo class (Modal/Pojo) with fields you require to store
package com.example.chirag.databasedemo; import java.io.Serializable; /** * Created by chirag on 6/2/18. */ public class UserInfo implements Serializable{ private static final long serialVersionUID = 0L; private String name; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
STEP : 3 Create activity_layout.xml with required input
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:context="com.example.chirag.databasedemo.MainActivity"> <TextView android:id="@+id/title1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="5dp" android:gravity="center" android:text="Store Object" android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" /> <android.support.design.widget.TextInputLayout android:id="@+id/input_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp"> <android.support.design.widget.TextInputEditText android:id="@+id/edit_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Name" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:id="@+id/input_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp"> <android.support.design.widget.TextInputEditText android:id="@+id/edit_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Email" /> </android.support.design.widget.TextInputLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/button_store" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="16dp" android:text="Store" /> <Button android:id="@+id/button_get" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Get" /> </LinearLayout> <LinearLayout android:id="@+id/layout_response" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:background="#F5F5F5" android:orientation="vertical" android:visibility="gone"> <TextView android:id="@+id/title2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:gravity="center" android:text="Get Object" android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" /> <TextView android:id="@+id/text_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" /> <TextView android:id="@+id/text_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" /> <Button android:id="@+id/button_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Delete" style="@style/Base.TextAppearance.AppCompat.Widget.Button.Borderless.Colored" android:layout_marginBottom="10dp"/> </LinearLayout> </LinearLayout>
STEP : 4 Create ActivityMain.java
package com.example.chirag.databasedemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private KeyValueHelper keyValueHelper; private EditText editName,editEmail; private TextView textName, textEmail; private Button btnStore,btnGet,btnDelete; private LinearLayout layoutResponse; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initObjects(); } private void initObjects() { /** * init UI controls */ editName = findViewById(R.id.edit_name); editEmail = findViewById(R.id.edit_email); textName = findViewById(R.id.text_name); textEmail = findViewById(R.id.text_email); btnStore = findViewById(R.id.button_store); btnGet = findViewById(R.id.button_get); btnDelete = findViewById(R.id.button_delete); layoutResponse = findViewById(R.id.layout_response); /** * init class object */ keyValueHelper = new KeyValueHelper(this); /** * Event listener */ btnStore.setOnClickListener(this); btnGet.setOnClickListener(this); btnDelete.setOnClickListener(this); } public void onStore(){ layoutResponse.setVisibility(View.GONE); if(TextUtils.isEmpty(editName.getText().toString())){ Toast.makeText(this, "Enter Name", Toast.LENGTH_SHORT).show(); } else if(TextUtils.isEmpty(editEmail.getText().toString())){ Toast.makeText(this, "Enter Email", Toast.LENGTH_SHORT).show(); } else{ UserInfo info = new UserInfo(); info.setName(editName.getText().toString()); info.setEmail(editEmail.getText().toString()); keyValueHelper.setValue("USER_DETAIL", info); Toast.makeText(this, "Record Saved!", Toast.LENGTH_SHORT).show(); editName.setText(""); editEmail.setText(""); } } public void onGet(){ UserInfo userInfo = keyValueHelper.getValue("USER_DETAIL", UserInfo.class); if(userInfo != null){ layoutResponse.setVisibility(View.VISIBLE); textName.setText(userInfo.getName()); textEmail.setText(userInfo.getEmail()); }else{ Toast.makeText(this, "Empty!!", Toast.LENGTH_SHORT).show(); } } private void onDelete() { keyValueHelper.deleteLike("USER_DETAIL"); layoutResponse.setVisibility(View.GONE); } @Override public void onClick(View v) { if(v.getId() == R.id.button_store){ onStore(); } else if(v.getId() == R.id.button_get){ onGet(); } else if(v.getId() == R.id.button_delete){ onDelete(); } } }
Comments
Post a Comment
Thanks, I'll respond you soon!