SQLite: SQLite Database Manipulation Class
In this Android Example we will learn how to create sqllite database manipulation class. How to open SQLite Database in Syncronize way to Insert, Update, Delete database records.
Project Structure :
I am taking an example of storing user data in SQLite database. I am using a table called User to store user data. This table contains three columns id (INT), name (TEXT), email(TEXT).
Structure of UserData table
Create UserData Class
UserData class with getter and setter methods to create single userdata as an object.| packagecom.androidexample.model;publicclassUserData {         //private variables         int_id;         String _name;         String _email;                // Empty constructor           publicUserData(){                 }                // constructor        publicUserData(intid, String name, String email){            this._id = id;            this._name = name;            this._email = email;        }             // constructor        publicUserData(String name, String email){            this._name = name;            this._email = email;        }                // getting ID        publicintgetID(){            returnthis._id;        }             // setting id        publicvoidsetID(intid){            this._id = id;        }             // getting name        publicString getName(){            returnthis._name;        }             // setting name        publicvoidsetName(String name){            this._name = name;        }             // getting email        publicString getEmail(){            returnthis._email;        }             // setting email        publicvoidsetEmail(String email){            this._email = email;        }            /* (non-Javadoc)         * @see java.lang.Object#toString()         */        @Override        publicString toString() {            return"UserInfo [name="+ _name + ", email="+ _email + "]";        }    } | 
Create SQLite Database Handler Class
1. Create class DBAdapter inside file DBAdapter.java.2. Create an inner class in DBAdapter and extend it with SQLiteOpenHelper class.
3. I have taken Inner class DataBaseHelper and extends SQLiteOpenHelper class.
4. After extending DBAdapter class from SQLiteOpenHelper We need to override two methods onCreate() and onUpgrage().
onCreate() : This is called when database is created.
onUpgrade() : This method is called when database version is changed (Upgraded like modifying the table structure, adding constraints to database etc.). see this line in DBAdapter class
| // increase by one in case of upgrade databasepublicstaticfinalintDATABASE_VERSION = 1; | 
open() Method
| /****** Open database for insert,update,delete in syncronized manner *******/privatestaticsynchronizedSQLiteDatabase open() throwsSQLException {   returnDBHelper.getWritableDatabase();} | 
DBAdapter.java file
| publicclassDBAdapter {        /******** if debug is set true then it will show all Logcat message *******/    publicstaticfinalbooleanDEBUG = true;        /******************** Logcat TAG ************/    publicstaticfinalString LOG_TAG = "DBAdapter";        /******************** Table Fields ************/    publicstaticfinalString KEY_ID = "_id";    publicstaticfinalString KEY_USER_NAME = "user_name";    publicstaticfinalString KEY_USER_EMAIL = "user_email";            /******************** Database Name ************/    publicstaticfinalString DATABASE_NAME = "DB_sqllite";        /**** Database Version (Increase one if want to also upgrade your database) ***/    publicstaticfinalintDATABASE_VERSION = 1;// started at 1    /** Table names */    publicstaticfinalString USER_TABLE = "tbl_user";        /******* Set all table with comma seperated like USER_TABLE,ABC_TABLE *******/    privatestaticfinalString[ ] ALL_TABLES = { USER_TABLE };        /** Create table syntax */    privatestaticfinalString USER_CREATE = "create table tbl_user                                              ( _id integer primary key autoincrement,                                                 user_name text not null,                                                 user_email text not null                                               );";        /******************** Used to open database in syncronized way ************/    privatestaticDataBaseHelper DBHelper = null;    protectedDBAdapter() {    }    /*********** Initialize database *************/    publicstaticvoidinit(Context context) {        if(DBHelper == null) {            if(DEBUG)                Log.i("DBAdapter", context.toString());            DBHelper = newDataBaseHelper(context);        }    }        /********** Main Database creation INNER class ********/    privatestaticclassDataBaseHelper extendsSQLiteOpenHelper {            publicDataBaseHelper(Context context) {            super(context, DATABASE_NAME, null, DATABASE_VERSION);        }        @Override        publicvoidonCreate(SQLiteDatabase db) {            if(DEBUG)                Log.i(LOG_TAG, "new create");            try{                db.execSQL(USER_CREATE);                            } catch(Exception exception) {                if(DEBUG)                    Log.i(LOG_TAG, "Exception onCreate() exception");            }        }        @Override        publicvoidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {            if(DEBUG)                Log.w(LOG_TAG, "Upgrading database from version"+ oldVersion                        + "to"+ newVersion + "...");            for(String table : ALL_TABLES) {                db.execSQL("DROP TABLE IF EXISTS "+ table);            }            onCreate(db);        }    } // Inner class closed            /***** Open database for insert,update,delete in syncronized manner *****/    privatestaticsynchronizedSQLiteDatabase open() throwsSQLException {        returnDBHelper.getWritableDatabase();    }    /****************** General functions*******************/            /********** Escape string for single quotes (Insert,Update) *******/    privatestaticString sqlEscapeString(String aString) {        String aReturn = "";                if(null!= aString) {            //aReturn = aString.replace(", );            aReturn = DatabaseUtils.sqlEscapeString(aString);            // Remove the enclosing single quotes ...            aReturn = aReturn.substring(1, aReturn.length() - 1);        }                returnaReturn;    }    /********* UnEscape string for single quotes (show data) *******/    privatestaticString sqlUnEscapeString(String aString) {                String aReturn = ";                if(null!= aString) {            aReturn = aString.replace(, ");        }                returnaReturn;    }            /********************************************************************/    } | 
Create, Read, Update and Delete Operations
INSERT OPERATION :| publicstaticvoidaddUserData(UserData uData) {    // Open database for Read / Write            finalSQLiteDatabase db = open();        String name = sqlEscapeString(uData.getName());    String email = sqlEscapeString(uData.getEmail());    ContentValues cVal = newContentValues();    cVal.put(KEY_USER_NAME, name);    cVal.put(KEY_USER_EMAIL, email);    // Insert user values in database    db.insert(USER_TABLE, null, cVal);         db.close(); // Closing database connection} | 
UPDATE OPERATION
| // Updating single datapublicstaticintupdateUserData(UserData data) {     finalSQLiteDatabase db = open();     ContentValues values = newContentValues();     values.put(KEY_USER_NAME, data.getName());     values.put(KEY_USER_EMAIL, data.getEmail());     // updating row     returndb.update(USER_TABLE, values, KEY_ID + " = ?",             newString[] { String.valueOf(data.getID()) }); } | 
GET RECORDS
| // Getting single contact publicstaticUserData getUserData(intid) {    // Open database for Read / Write     finalSQLiteDatabase db = open();     Cursor cursor = db.query(USER_TABLE, newString[] { KEY_ID,             KEY_USER_NAME, KEY_USER_EMAIL }, KEY_ID + "=?",             newString[] { String.valueOf(id) }, null, null, null, null);     if(cursor != null)         cursor.moveToFirst();     UserData data = newUserData(Integer.parseInt(cursor.getString(0)),             cursor.getString(1), cursor.getString(2));     // return user data     returndata; }   // Getting All User data publicstaticList<UserData> getAllUserData() {     List<UserData> contactList = newArrayList<UserData>();     // Select All Query     String selectQuery = "SELECT  * FROM "+ USER_TABLE;     // Open database for Read / Write     finalSQLiteDatabase db = open();     Cursor cursor = db.rawQuery ( selectQuery, null);     // looping through all rows and adding to list     if(cursor.moveToFirst()) {         do{             UserData data = newUserData();             data.setID(Integer.parseInt(cursor.getString(0)));             data.setName(cursor.getString(1));             data.setEmail(cursor.getString(2));             // Adding contact to list             contactList.add(data);         } while(cursor.moveToNext());     }     // return user list     returncontactList; } | 
GET NUMBER OF RECORDS
| publicstaticintgetUserDataCount() {     finalSQLiteDatabase db = open();     String countQuery = "SELECT  * FROM "+ USER_TABLE;     Cursor cursor = db.rawQuery(countQuery, null);     cursor.close();     // return count     returncursor.getCount(); } | 
DELETE RECORD
| // Deleting single contactpublicstaticvoiddeleteUserData(UserData data) {    finalSQLiteDatabase db = open();    db.delete(USER_TABLE, KEY_ID + " = ?",            newString[] { String.valueOf(data.getID()) });    db.close();} | 
Complete DBAdapter.java Class With All Manipulations:
| publicclassDBAdapter {        /******* if debug is set true then it will show all Logcat message ***/    publicstaticfinalbooleanDEBUG = true;        /********** Logcat TAG ************/    publicstaticfinalString LOG_TAG = "DBAdapter";        /************ Table Fields ************/    publicstaticfinalString KEY_ID = "_id";    publicstaticfinalString KEY_USER_NAME = "user_name";    publicstaticfinalString KEY_USER_EMAIL = "user_email";            /************* Database Name ************/    publicstaticfinalString DATABASE_NAME = "DB_sqllite";        /**** Database Version (Increase one if want to also upgrade your database) ****/    publicstaticfinalintDATABASE_VERSION = 1;// started at 1    /** Table names */    publicstaticfinalString USER_TABLE = "tbl_user";        /**** Set all table with comma seperated like USER_TABLE,ABC_TABLE ******/    privatestaticfinalString[ ] ALL_TABLES = { USER_TABLE };        /** Create table syntax */    privatestaticfinalString USER_CREATE = "create table tbl_user                                              ( _id integer primary key autoincrement,                                                 user_name text not null,                                                 user_email text not null                                              );";        /********* Used to open database in syncronized way *********/    privatestaticDataBaseHelper DBHelper = null;    protectedDBAdapter() {        }        /********** Initialize database *********/    publicstaticvoidinit(Context context) {        if(DBHelper == null) {            if(DEBUG)                Log.i("DBAdapter", context.toString());            DBHelper = newDataBaseHelper(context);        }    }      /********** Main Database creation INNER class ********/    privatestaticclassDataBaseHelper extendsSQLiteOpenHelper {        publicDataBaseHelper(Context context) {            super(context, DATABASE_NAME, null, DATABASE_VERSION);        }        @Override        publicvoidonCreate(SQLiteDatabase db) {            if(DEBUG)                Log.i(LOG_TAG, "new create");            try{                db.execSQL(USER_CREATE);                            } catch(Exception exception) {                if(DEBUG)                    Log.i(LOG_TAG, "Exception onCreate() exception");            }        }        @Override        publicvoidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {            if(DEBUG)                Log.w(LOG_TAG, "Upgrading database from version"+ oldVersion                        + "to"+ newVersion + "...");            for(String table : ALL_TABLES) {                db.execSQL("DROP TABLE IF EXISTS "+ table);            }            onCreate(db);        }    } // Inner class closed            /***** Open database for insert,update,delete in syncronized manner ****/    privatestaticsynchronizedSQLiteDatabase open() throwsSQLException {        returnDBHelper.getWritableDatabase();    }    /************* General functions*************/            /*********** Escape string for single quotes (Insert,Update) ********/    privatestaticString sqlEscapeString(String aString) {        String aReturn = "";                if(null!= aString) {            //aReturn = aString.replace(", );            aReturn = DatabaseUtils.sqlEscapeString(aString);            // Remove the enclosing single quotes ...            aReturn = aReturn.substring(1, aReturn.length() - 1);        }                returnaReturn;    }    /********** UnEscape string for single quotes (show data) ************/    privatestaticString sqlUnEscapeString(String aString) {                String aReturn = ";                if(null!= aString) {            aReturn = aString.replace(, ");        }                returnaReturn;    }       /********* User data functons *********/  publicstaticvoidaddUserData(UserData uData) {        // Open database for Read / Write                finalSQLiteDatabase db = open();                String name = sqlEscapeString(uData.getName());        String email = sqlEscapeString(uData.getEmail());        ContentValues cVal = newContentValues();        cVal.put(KEY_USER_NAME, name);        cVal.put(KEY_USER_EMAIL, email);        // Insert user values in database        db.insert(USER_TABLE, null, cVal);             db.close(); // Closing database connection    }   // Updating single data   publicstaticintupdateUserData(UserData data) {        finalSQLiteDatabase db = open();         ContentValues values = newContentValues();        values.put(KEY_USER_NAME, data.getName());        values.put(KEY_USER_EMAIL, data.getEmail());         // updating row        returndb.update(USER_TABLE, values, KEY_ID + " = ?",                newString[] { String.valueOf(data.getID()) });    }       // Getting single contact   publicstaticUserData getUserData(intid) {       // Open database for Read / Write        finalSQLiteDatabase db = open();         Cursor cursor = db.query(USER_TABLE, newString[] { KEY_ID,                KEY_USER_NAME, KEY_USER_EMAIL }, KEY_ID + "=?",                newString[] { String.valueOf(id) }, null, null, null, null);        if(cursor != null)            cursor.moveToFirst();         UserData data = newUserData(Integer.parseInt(cursor.getString(0)),                cursor.getString(1), cursor.getString(2));        // return user data        returndata;    }       // Getting All User data    publicstaticList<UserData> getAllUserData() {        List<UserData> contactList = newArrayList<UserData>();        // Select All Query        String selectQuery = "SELECT  * FROM "+ USER_TABLE;         // Open database for Read / Write        finalSQLiteDatabase db = open();        Cursor cursor = db.rawQuery ( selectQuery, null);         // looping through all rows and adding to list        if(cursor.moveToFirst()) {            do{                UserData data = newUserData();                data.setID(Integer.parseInt(cursor.getString(0)));                data.setName(cursor.getString(1));                data.setEmail(cursor.getString(2));                // Adding contact to list                contactList.add(data);            } while(cursor.moveToNext());        }         // return user list        returncontactList;    }     // Deleting single contact    publicstaticvoiddeleteUserData(UserData data) {        finalSQLiteDatabase db = open();        db.delete(USER_TABLE, KEY_ID + " = ?",                newString[] { String.valueOf(data.getID()) });        db.close();    }     // Getting dataCount    publicstaticintgetUserDataCount() {        finalSQLiteDatabase db = open();        String countQuery = "SELECT  * FROM "+ USER_TABLE;        Cursor cursor = db.rawQuery(countQuery, null);        cursor.close();         // return count        returncursor.getCount();    }}  // CLASS CLOSED | 
USE OF DBAdapter CLASS
| Initialize database classand create DataBaseHelper Object.DBAdapter.init(this); | 
| publicclassAndroidSqliteExample extendsActivity {    @Override    protectedvoidonCreate(Bundle savedInstanceState) {        /******************* Intialize Database *************/        DBAdapter.init(this);                super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_sqlite_example);                         // Inserting Contacts        Log.d("Insert: ", "Inserting ..");        DBAdapter.addUserData(newUserData("Ravi", "9100000000"));        DBAdapter.addUserData(newUserData("Srinivas", "9199999999"));        DBAdapter.addUserData(newUserData("Tommy", "9522222222"));        DBAdapter.addUserData(newUserData("Karthik", "9533333333"));         // Reading all contacts        Log.d("Reading: ", "Reading all contacts..");        List<UserData> data = DBAdapter.getAllUserData();               for(UserData dt : data) {            String log = "Id: "+dt.getID()+" ,Name: "+ dt.getName() + " ,Phone: "+ dt.getEmail();                // Writing Contacts to log            Log.d("Name: ", log);        }          }} | 
 
 See Output Log Data
OUTPUT
