Understanding SQLITE DataBase in Android
Aim: TO know about SQLITE database in android Application.
Topics: Introduction to SQLITE
Architecture of SQLITE
Creating Simple Model
OPerations in SQLITE Database :
CodeSnnipets
Introduction to SQLITE :
Sqlite is OPen-Source portable database in android .It is an inbuilt database which can be accessible
from the device OS without any external libraries .
These support many operation as like normal database like upgrade,create ,delete,insert etc.
there are certain set of stander ed API to query the database which we will cover further in the post .
Architecture of SQLITE :
The Figure shows the architecture of the SQLITE database in android which is comprise of various parts like CORE,SQL Compiler,Backend.
The SQLITE database is in the package android.database.sqlite.*
If your application creates a database, this database is by default saved in the directoryDATA/data/APP_NAME/databases/FILENAME
.
SQLiteOpenHelper class provides the functionality to use the SQLite database.
Creating Simple Model :
For creating and accessing the SQLite database a standard step is to Extend a class with SQLiteOpenHelper.After that have to provide the implementation of onCreate() and onUpgrade() methods of SQLiteOpenHelper class.
package sqlite.blazin.in.sqlite;
/**
* Created by bhushan on 29/2/16.
*/
public class Contact {
int _id;
String _name;
String _phone_number;
public Contact() {
}
public Contact(int id, String name, String _phone_number) {
this._id = id;
this._name = name;
this._phone_number = _phone_number;
}
public Contact(String name, String _phone_number) {
this._name = name;
this._phone_number = _phone_number;
}
public int getID() {
return this._id;
}
public void setID(int id) {
this._id = id;
}
public String getName() {
return this._name;
}
public void setName(String name){
this._name = name;
}
public String getPhoneNumber(){
return this._phone_number;
}
public void setPhoneNumber(String phone_number){
this._phone_number = phone_number;
}
}
This the Model class for making the contact object which are going to use for data operation.
Now this is how the way is to write the OPENHelper Class for the database related operations
package sqlite.blazin.in.sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Created by bhushan on 29/2/16.
*/
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contactsManager";
private static final String TABLE_CONTACTS = "contacts";
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);
//3rd argument to be passed is CursorFactory instance
}
// Creating Tables
@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);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
// Create tables again
onCreate(db);
}
// code to add the 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);
//2nd argument is String containing nullColumnHack
db.close(); // Closing database connection
}
// code to get the 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;
}
// code to get all contacts in a list view
public List getAllContacts() {
List contactList = new ArrayList();
// 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;
}
// code to update the 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();
}
}
Your main Activity class looks like this.
package sqlite.blazin.in.sqlite;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button insert,Print;
final TextView info;
insert=(Button)findViewById(R.id.btnInsert);
Print=(Button)findViewById(R.id.btnPrint);
info=(TextView)findViewById(R.id.tvInfo);
final DatabaseHandler databaseHelper = new DatabaseHandler(this);
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Inserting Contacts
Log.d("Insert: ", "Inserting ..");
databaseHelper.addContact(new Contact("BlazinRavi", "9100000000"));
databaseHelper.addContact(new Contact("BlazinGanesh", "88888888"));
databaseHelper.addContact(new Contact("Amnda", "56897566"));
databaseHelper.addContact(new Contact("stephy", "123456"));
Toast.makeText(MainActivity.this,"DATA INserted ",Toast.LENGTH_SHORT).show();
}
});
Print.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Reading all contacts
Log.d("Reading: ", "Reading all contacts..");
StringBuilder sb= new StringBuilder();
List contacts = databaseHelper.getAllContacts();
for (Contact cn : contacts) {
String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " +
cn.getPhoneNumber();
// Writing Contacts to log
sb.append(log);
sb.append("\n");
sb.append("\n");
Log.d("Name: ", log);
}
info.setText(sb);
}
});
}
}
This is how the Code looks when we run