SQLite: Android SQLite Database Single Tabble
>>Download Soure
Contacts Table Structure
Writing Contact Class
Before you go further you need to write your Contact class with all getter and setter methods to maintain single contact as an object.| packagecom.androidhive.androidsqlite; publicclassContact {        //private variables    int_id;    String _name;    String _phone_number;        // Empty constructor    publicContact(){            }    // constructor    publicContact(intid, String name, String _phone_number){        this._id = id;        this._name = name;        this._phone_number = _phone_number;    }        // constructor    publicContact(String name, String _phone_number){        this._name = name;        this._phone_number = _phone_number;    }    // 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 phone number    publicString getPhoneNumber(){        returnthis._phone_number;    }        // setting phone number    publicvoidsetPhoneNumber(String phone_number){        this._phone_number = phone_number;    }} | 
Writing SQLite Database Handler Class
We need to write our own class to handle all database CRUD(Create, Read, Update and Delete) operations.
1. Create a new project by going to File ⇒ New Android Project.
2. Once the project is created, create a new class in your project src directory and name it as DatabaseHandler.java ( Right Click on src/package ⇒ New ⇒ Class)
3. Now extend your DatabaseHandler.java class from SQLiteOpenHelper.
2. Once the project is created, create a new class in your project src directory and name it as DatabaseHandler.java ( Right Click on src/package ⇒ New ⇒ Class)
3. Now extend your DatabaseHandler.java class from SQLiteOpenHelper.
| publicclassDatabaseHandler extendsSQLiteOpenHelper { | 
4. After extending your class from SQLiteOpenHelper you need to override two methods onCreate() and onUpgrage()
onCreate() – These is where we need to write create table statements. This is called when database is created.
onUpgrade() – This method is called when database is upgraded like modifying the table structure, adding constraints to database etc.,
onCreate() – These is where we need to write create table statements. This is called when database is created.
onUpgrade() – This method is called when database is upgraded like modifying the table structure, adding constraints to database etc.,
| publicclassDatabaseHandler extendsSQLiteOpenHelper {    // All Static variables    // Database Version    privatestaticfinalintDATABASE_VERSION = 1;    // Database Name    privatestaticfinalString DATABASE_NAME = "contactsManager";    // Contacts table name    privatestaticfinalString TABLE_CONTACTS = "contacts";    // Contacts Table Columns names    privatestaticfinalString KEY_ID = "id";    privatestaticfinalString KEY_NAME = "name";    privatestaticfinalString KEY_PH_NO = "phone_number";    publicDatabaseHandler(Context context) {        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    // Creating Tables    @Override    publicvoidonCreate(SQLiteDatabase db) {        String CREATE_CONTACTS_TABLE = "CREATE TABLE "+ TABLE_CONTACTS + "("                + KEY_ID + " INTEGER PRIMARY KEY,"+ KEY_NAME + " TEXT,"                + KEY_PH_NO + " TEXT"+ ")";        db.execSQL(CREATE_CONTACTS_TABLE);    }    // Upgrading database    @Override    publicvoidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {        // Drop older table if existed        db.execSQL("DROP TABLE IF EXISTS "+ TABLE_CONTACTS);        // Create tables again        onCreate(db);    } | 
⇒All CRUD Operations (Create, Read, Update and Delete)
Now
 we need to write methods for handling all database read and write 
operations. Here we are implementing following methods for our contacts 
table.
| // Adding new contactpublicvoidaddContact(Contact contact) {}// Getting single contactpublicContact getContact(intid) {}// Getting All ContactspublicList<Contact> getAllContacts() {}// Getting contacts CountpublicintgetContactsCount() {}// Updating single contactpublicintupdateContact(Contact contact) {}// Deleting single contactpublicvoiddeleteContact(Contact contact) {} | 
⇒Inserting new Record
The addContact() method accepts Contact object as parameter. We need to build ContentValues parameters using Contact object. Once we inserted data in database we need to close the database connection.|     // Adding new contactpublicvoidaddContact(Contact contact) {    SQLiteDatabase db = this.getWritableDatabase();    ContentValues values = newContentValues();    values.put(KEY_NAME, contact.getName()); // Contact Name    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number    // Inserting Row    db.insert(TABLE_CONTACTS, null, values);    db.close(); // Closing database connection} | 
⇒Reading Row(s)
The following method getContact() will read single contact row. It accepts id as parameter and will return the matched row from the database.|     // Getting single contactpublicContact getContact(intid) {    SQLiteDatabase db = this.getReadableDatabase();    Cursor cursor = db.query(TABLE_CONTACTS, newString[] { KEY_ID,            KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",            newString[] { String.valueOf(id) }, null, null, null, null);    if(cursor != null)        cursor.moveToFirst();    Contact contact = newContact(Integer.parseInt(cursor.getString(0)),            cursor.getString(1), cursor.getString(2));    // return contact    returncontact;} | 
|     // Getting All Contacts publicList<Contact> getAllContacts() {    List<Contact> contactList = newArrayList<Contact>();    // Select All Query    String selectQuery = "SELECT  * FROM "+ TABLE_CONTACTS;    SQLiteDatabase db = this.getWritableDatabase();    Cursor cursor = db.rawQuery(selectQuery, null);    // looping through all rows and adding to list    if(cursor.moveToFirst()) {        do{            Contact contact = newContact();            contact.setID(Integer.parseInt(cursor.getString(0)));            contact.setName(cursor.getString(1));            contact.setPhoneNumber(cursor.getString(2));            // Adding contact to list            contactList.add(contact);        } while(cursor.moveToNext());    }    // return contact list    returncontactList;} | 
| // Getting contacts Count    publicintgetContactsCount() {        String countQuery = "SELECT  * FROM "+ TABLE_CONTACTS;        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db.rawQuery(countQuery, null);        cursor.close();        // return count        returncursor.getCount();    } | 
⇒Updating Record
updateContact() will update single contact in database. This method accepts Contact class object as parameter.|     // Updating single contactpublicintupdateContact(Contact contact) {    SQLiteDatabase db = this.getWritableDatabase();    ContentValues values = newContentValues();    values.put(KEY_NAME, contact.getName());    values.put(KEY_PH_NO, contact.getPhoneNumber());    // updating row    returndb.update(TABLE_CONTACTS, values, KEY_ID + " = ?",            newString[] { String.valueOf(contact.getID()) });} | 
⇒Deleting Record
deleteContact() will delete single contact from database.|     // Deleting single contactpublicvoiddeleteContact(Contact contact) {    SQLiteDatabase db = this.getWritableDatabase();    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",            newString[] { String.valueOf(contact.getID()) });    db.close();} | 
Complete DatabaseHandler.java Code:
| packagecom.androidhive.androidsqlite;importjava.util.ArrayList;importjava.util.List;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;publicclassDatabaseHandler extendsSQLiteOpenHelper {    // All Static variables    // Database Version    privatestaticfinalintDATABASE_VERSION = 1;    // Database Name    privatestaticfinalString DATABASE_NAME = "contactsManager";    // Contacts table name    privatestaticfinalString TABLE_CONTACTS = "contacts";    // Contacts Table Columns names    privatestaticfinalString KEY_ID = "id";    privatestaticfinalString KEY_NAME = "name";    privatestaticfinalString KEY_PH_NO = "phone_number";    publicDatabaseHandler(Context context) {        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    // Creating Tables    @Override    publicvoidonCreate(SQLiteDatabase db) {        String CREATE_CONTACTS_TABLE = "CREATE TABLE "+ TABLE_CONTACTS + "("                + KEY_ID + " INTEGER PRIMARY KEY,"+ KEY_NAME + " TEXT,"                + KEY_PH_NO + " TEXT"+ ")";        db.execSQL(CREATE_CONTACTS_TABLE);    }    // Upgrading database    @Override    publicvoidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {        // Drop older table if existed        db.execSQL("DROP TABLE IF EXISTS "+ TABLE_CONTACTS);        // Create tables again        onCreate(db);    }    /**     * All CRUD(Create, Read, Update, Delete) Operations     */    // Adding new contact    voidaddContact(Contact contact) {        SQLiteDatabase db = this.getWritableDatabase();        ContentValues values = newContentValues();        values.put(KEY_NAME, contact.getName()); // Contact Name        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone        // Inserting Row        db.insert(TABLE_CONTACTS, null, values);        db.close(); // Closing database connection    }    // Getting single contact    Contact getContact(intid) {        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db.query(TABLE_CONTACTS, newString[] { KEY_ID,                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",                newString[] { String.valueOf(id) }, null, null, null, null);        if(cursor != null)            cursor.moveToFirst();        Contact contact = newContact(Integer.parseInt(cursor.getString(0)),                cursor.getString(1), cursor.getString(2));        // return contact        returncontact;    }        // Getting All Contacts    publicList<Contact> getAllContacts() {        List<Contact> contactList = newArrayList<Contact>();        // Select All Query        String selectQuery = "SELECT  * FROM "+ TABLE_CONTACTS;        SQLiteDatabase db = this.getWritableDatabase();        Cursor cursor = db.rawQuery(selectQuery, null);        // looping through all rows and adding to list        if(cursor.moveToFirst()) {            do{                Contact contact = newContact();                contact.setID(Integer.parseInt(cursor.getString(0)));                contact.setName(cursor.getString(1));                contact.setPhoneNumber(cursor.getString(2));                // Adding contact to list                contactList.add(contact);            } while(cursor.moveToNext());        }        // return contact list        returncontactList;    }    // Updating single contact    publicintupdateContact(Contact contact) {        SQLiteDatabase db = this.getWritableDatabase();        ContentValues values = newContentValues();        values.put(KEY_NAME, contact.getName());        values.put(KEY_PH_NO, contact.getPhoneNumber());        // updating row        returndb.update(TABLE_CONTACTS, values, KEY_ID + " = ?",                newString[] { String.valueOf(contact.getID()) });    }    // Deleting single contact    publicvoiddeleteContact(Contact contact) {        SQLiteDatabase db = this.getWritableDatabase();        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",                newString[] { String.valueOf(contact.getID()) });        db.close();    }    // Getting contacts Count    publicintgetContactsCount() {        String countQuery = "SELECT  * FROM "+ TABLE_CONTACTS;        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db.rawQuery(countQuery, null);        cursor.close();        // return count        returncursor.getCount();    }} | 
Usage:
| packagecom.androidhive.androidsqlite;importjava.util.List;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importandroid.widget.TextView;publicclassAndroidSQLiteTutorialActivity extendsActivity {    @Override    publicvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                DatabaseHandler db = newDatabaseHandler(this);                /**         * CRUD Operations         * */        // Inserting Contacts        Log.d("Insert: ", "Inserting ..");         db.addContact(newContact("Ravi", "9100000000"));                db.addContact(newContact("Srinivas", "9199999999"));        db.addContact(newContact("Tommy", "9522222222"));        db.addContact(newContact("Karthik", "9533333333"));                // Reading all contacts        Log.d("Reading: ", "Reading all contacts..");         List<Contact> contacts = db.getAllContacts();                       for(Contact cn : contacts) {            String log = "Id: "+cn.getID()+" ,Name: "+ cn.getName() + " ,Phone: "+ cn.getPhoneNumber();                // Writing Contacts to log        Log.d("Name: ", log);    }    }} | 
