Tuesday, September 15, 2015

SQLite database

In this tutorial I am taking an example of storing user contacts in SQLite database. I am using a table called Contacts to store user contacts. This table contains three columns id (INT)name (TEXT),phone_number(TEXT).



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.
Contact.java
package com.example.kjs;

public class Contact {
    //private variables
   int _id;
   String _name;
   String _phone_number;
   
   
// Empty constructor
   public Contact(){
        
   }
   
  // constructor
public Contact(int id, String name, String _phone_number){
       this._id = id;
       this._name = name;
       this._phone_number = _phone_number;
   }
   
//constructor
public Contact(String name, String _phone_number){
   this._name = name;
   this._phone_number = _phone_number;
}


//getting ID
public int getID(){
   return this._id;
}

// setting id
public void setID(int id){
   this._id = id;
}
// getting name
public String getName(){
   return this._name;
}
// setting name
public void setName(String name){
   this._name = name;
}
// getting phone number
public String getPhoneNumber(){
   return this._phone_number;
}
// setting phone number
public void setPhoneNumber(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 asDatabaseHandler.java ( Right Click on src/package New Class)
3. Now extend your DatabaseHandler.java class from SQLiteOpenHelper.

public class DatabaseHandler extends SQLiteOpenHelper {
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.,


package com.example.kjs;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {
   

    // All Static variables
   // Database Version
   private static final int DATABASE_VERSION = 1;
   // Database Name
   private static final String DATABASE_NAME = "contactsManager";
   // Contacts table name
   private static final String TABLE_CONTACTS = "contacts";
   // Contacts Table Columns names
   private static final String KEY_ID = "id";
   private static final String KEY_NAME = "name";
   private static final String KEY_PH_NO = "phone_number";
   
   
   public DatabaseHandler(Context context) {
       super(context, DATABASE_NAME, null, DATABASE_VERSION);
   }
   
   
    /* public DatabaseHandler(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }*/

    @Override
    public void onCreate(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);
       
        // TODO Auto-generated method stub
       
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        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 contact
   void addContact(Contact contact) {
       SQLiteDatabase db = this.getWritableDatabase();
       ContentValues values = new ContentValues();
       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(int id) {
       SQLiteDatabase db = this.getReadableDatabase();
       Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
               KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
               new String[] { String.valueOf(id) }, null, null, null, null);
       if (cursor != null)
           cursor.moveToFirst();
       Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
               cursor.getString(1), cursor.getString(2));
       // return contact
       return contact;
   }
   
   // Getting All Contacts
   public List<Contact> getAllContacts() {
       List<Contact> contactList = new ArrayList<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 = new Contact();
               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
       return contactList;
   }
   
   
// Updating single contact
   public int updateContact(Contact contact) {
       SQLiteDatabase db = this.getWritableDatabase();
       ContentValues values = new ContentValues();
       values.put(KEY_NAME, contact.getName());
       values.put(KEY_PH_NO, contact.getPhoneNumber());
       // updating row
       return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
               new String[] { String.valueOf(contact.getID()) });
   }
   // Deleting single contact
   public void deleteContact(Contact contact) {
       SQLiteDatabase db = this.getWritableDatabase();
       db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
               new String[] { String.valueOf(contact.getID()) });
       db.close();
   }
   // Getting contacts Count
   public int getContactsCount() {
       String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
       SQLiteDatabase db = this.getReadableDatabase();
       Cursor cursor = db.rawQuery(countQuery, null);
       cursor.close();
       // return count
       return cursor.getCount();
   }
   
   
   

}
==========================================================

AndroidSQLiteTutorialActivity


package com.example.kjs;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class AndroidSQLiteTutorialActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       
       
       DatabaseHandler db = new DatabaseHandler(this);
       
       // Inserting Contacts
       Log.d("Insert: ", "Inserting ..");
       db.addContact(new Contact("kjs", "9100000000"));        
       db.addContact(new Contact("kaj", "2523635210"));
       db.addContact(new Contact("nks", "9988998855"));
       db.addContact(new Contact("ppp", "8822114455"));
       
       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();
           Log.d("Name: ", log);
       }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.activity_main, menu);
       return true;
   }

   
}


Android Log Cat Report:

I am writing output to Log report. You can see your log report by going to Windows Show View Other.. Android Log Cat.










No comments:

Post a Comment