· 8 years ago · Mar 19, 2018, 12:36 PM
1package com.example.yash.contacts;
2import android.content.ContentResolver;
3import android.content.ContentValues;
4import android.content.Context;
5import android.database.Cursor;
6import android.content.Context;
7import android.database.sqlite.SQLiteDatabase;
8import android.database.sqlite.SQLiteOpenHelper;
9import android.net.Uri;
10import android.provider.ContactsContract;
11
12import java.util.ArrayList;
13
14/**
15 * Created by shubham on 3/2/2018.
16 * DatabaseHandler class for Contact app
17 */
18
19public class ContactDatabase extends SQLiteOpenHelper{
20
21 //Database Name, Database Version ,Table Name
22 private static final int Database_Version = 1;
23 private static final String Database_Name = "contactList";
24 private static final String Table_Contact = "contactTable";
25
26 //Table Column Names
27
28 private static final String COLUMN_ID = "id";
29 private static final String COLUMN_PHONENUMBER = "number";
30 private static final String COLUMN_NAME = "name";
31 private static final String COLUMN_IMAGE = "image";
32
33 //Overriding default constructor to pass database name and version
34 public ContactDatabase(Context context){
35 super(context,Database_Name,null,Database_Version);
36 }
37
38 //Overriding onCreate and onUpgrade methods
39
40 @Override
41 public void onCreate(SQLiteDatabase db)
42 {
43 //create table contact query is run using execSQL() method
44 String query = "CREATE TABLE " + Table_Contact + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " VARCHAR, " + COLUMN_PHONENUMBER + " VARCHAR, " + COLUMN_IMAGE + " BLOB NOT NULL);";
45 db.execSQL(query);
46 }
47
48 @Override
49 public void onUpgrade(SQLiteDatabase db,int oldV, int newV )
50 {
51 //If table already exists delete old table and call onCreate() method to create table again
52 db.execSQL("DROP TABLE IF EXISTS " + Table_Contact);
53 onCreate(db);
54 }
55
56 //To add Contact information in database
57 public void addContact(ContactObject contactObject)
58 {
59 SQLiteDatabase db = this.getWritableDatabase();
60 //Transaction is used for better performance and make sure contact added
61 db.beginTransaction();
62 ContentValues cV = new ContentValues();
63 cV.put(COLUMN_NAME,contactObject.getName());
64 cV.put(COLUMN_PHONENUMBER,contactObject.getPhone_number());
65 cV.put(COLUMN_IMAGE,contactObject.getImage());
66 db.insert(Table_Contact,null,cV);
67 db.setTransactionSuccessful();
68 db.endTransaction();
69 db.close();
70 //this can also achieved by using db.execSQL("database query to insert record");
71 }
72
73 //For Finding Detail Of Contact Whose Name User Know
74 public ContactObject searchSingle(String name)
75 {
76 String query= "SELECT * FROM " + Table_Contact + "WHERE " + COLUMN_NAME + "=\" " + name + "\"" ;
77 SQLiteDatabase db = this.getWritableDatabase();
78 //rawQuery() return matching data in a form of Cursor object
79 Cursor C = db.rawQuery(query,null);
80 ContactObject contactObject = new ContactObject();
81 // moveToFirst() check whether there is data in cursor or not
82 if(C.moveToFirst()) {
83 C.moveToFirst();
84 //putting cursor data into contactObject
85 contactObject.setId(Integer.parseInt(C.getString(0)));
86 contactObject.setName(C.getString(1));
87 contactObject.setPhone_number(C.getString(2));
88 contactObject.setImage(C.getBlob(3));
89 C.close();
90 }
91 else{
92 C.close();
93 contactObject =null;
94 }
95 db.close();
96 return contactObject;
97 }
98
99 //Deleting a Contact From Database
100
101 public boolean deleteContact(ContactObject contactObject)
102 {
103 int id=contactObject.getId();
104 String[] id_string = new String[id];
105 SQLiteDatabase db = this.getWritableDatabase();
106 db.beginTransaction();
107 //delete() return int telling no. of rows affected otherwise 0
108 int result = db.delete(Table_Contact,COLUMN_ID + "=?",id_string);
109 db.endTransaction();
110 db.close();
111 if(result>0){return true;}
112 return false;
113 }
114
115 //Updating contact
116
117 public boolean updateContact(ContactObject contactObject)
118 {
119 SQLiteDatabase db = this.getWritableDatabase();
120 ContentValues cV = new ContentValues();
121 cV.put(COLUMN_ID,contactObject.getId());
122 cV.put(COLUMN_NAME,contactObject.getName());
123 cV.put(COLUMN_PHONENUMBER,contactObject.getPhone_number());
124 cV.put(COLUMN_IMAGE,contactObject.getImage());
125 db.beginTransaction();
126 int result=db.update(Table_Contact,cV,COLUMN_ID + "=?",new String[]{String.valueOf(contactObject.getId())});
127 db.endTransaction();
128 db.close();
129 if(result>0){return true;}
130 return false;
131 }
132
133 //fetching all contacts and return it through ArrayList we can use rawQuery(SELECT QUERY) also for retrieving all contacts
134
135 public ArrayList<ContactObject> allContacts(){
136 SQLiteDatabase db =this.getReadableDatabase();
137 ArrayList<ContactObject> allContactList = new ArrayList<ContactObject>();
138 Cursor cursor= db.query(Table_Contact,null,null,null,null,null,null);
139
140 if(cursor.getCount()>0)
141 {
142 for(int i=0;i<cursor.getCount();i++)
143 {
144 cursor.moveToNext();
145 ContactObject contactObject = new ContactObject();
146 contactObject.setId(cursor.getInt(0));
147 contactObject.setName(cursor.getString(1));
148 contactObject.setPhone_number(cursor.getString(2));
149 contactObject.setImage(cursor.getBlob(3));
150 allContactList.add(contactObject);
151 }
152 }
153 cursor.close();
154 db.close();
155 return allContactList;
156 }
157
158 //Getting Total Number Of Contacts
159
160 public int totalContact()
161 {
162 SQLiteDatabase db = this.getReadableDatabase();
163 Cursor cursor = db.query(Table_Contact,null,null,null,null,null,null);
164 int total = cursor.getCount();
165 cursor.close();
166 db.close();
167 return total;
168 }
169
170}