I have build an Android application, where I'm using Sqlite Database. Here I have written a getAllContacts, and i want to print all rows in a for loop.
But when I have stored 5rows of data, and when getAllContacts is executed, only the last row data are printed, but not the rest(Please Help me in printing all rows). I don't understand where i have gone wrong, please Correct me. Thank You in Advance
Here is my DataBaseCOde :
public List<SqlContact> getAllContacts() {
List<SqlContact> contactList = new ArrayList<SqlContact>();
String selectQuery = "SELECT * FROM " + CONTACTS_TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
SqlContact contact = new SqlContact();
contact.setId((cursor.getString(0)));
contact.setDescription(cursor.getString(1));
contact.setMessage(cursor.getString(2));
contact.setStatus(cursor.getString(3));
contact.setTimestamp(cursor.getString(4));
contact.setType(cursor.getString(5));
contactList.add(contact);
} while (cursor.moveToNext());
}
return contactList;
}
Here is my Activity Code (For loop to print all Rows) :
SqlDatabaseNotification db = new SqlDatabaseNotification(getApplicationContext());
List<SqlContact> contacts = db.getAllContacts();
for (SqlContact cn : contacts) {
String log = "Id: " + cn.getStatus() + " ,Description: " + cn.getDescription() + " ,Message: " + cn.getMessage() + " ,Status: " + cn.getStatus()
+ " ,TimeStamp: " + cn.getTimestamp() + " ,Type: " + cn.getType();
// Writing Contacts to log
Log.d("Name: ", log);
}
Complete SQLITEDATABASE :
public class SqlDatabaseNotification extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName.db";
public static final String CONTACTS_TABLE_NAME = "contacts";
public static final String CONTACTS_COLUMN_ID = "id";
public static final String CONTACTS_COLUMN_DESCRIPTION = "description";
public static final String CONTACTS_COLUMN_STATUS = "status";
public static final String CONTACTS_COLUMN_TIMESTAMP = "timestamp";
public static final String CONTACTS_COLUMN_TYPE = "type";
public static final String CONTACTS_COLUMN_MESSAGE = "message";
private HashMap hp;
public SqlDatabaseNotification(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table contacts " +
"(id integer primary key, description text,message text,status text, timestamp text,type text)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
void addContact(SqlContact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("id", contact.getID());
contentValues.put("description", contact.getDescription());
contentValues.put("message", contact.getMessage());
contentValues.put("status", contact.getStatus());
contentValues.put("timestamp", contact.getTimestamp());
contentValues.put("type", contact.getType());
db.insert("contacts", null, contentValues);
db.close(); // Closing database connection
}
SqlContact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(CONTACTS_TABLE_NAME, new String[]{CONTACTS_COLUMN_ID,
CONTACTS_COLUMN_DESCRIPTION, CONTACTS_COLUMN_MESSAGE, CONTACTS_COLUMN_STATUS, CONTACTS_COLUMN_TIMESTAMP, CONTACTS_COLUMN_TYPE}, CONTACTS_COLUMN_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
SqlContact contact = new SqlContact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
// return contact
return contact;
}
public List<SqlContact> getAllContacts() {
List<SqlContact> contactList = new ArrayList<SqlContact>();
// Select All Query
String selectQuery = "SELECT * FROM " + CONTACTS_TABLE_NAME;
// closeDB();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
SqlContact contact = new SqlContact();
contact.setID(Integer.parseInt((cursor.getString(0))));
contact.setDescription(cursor.getString(1));
contact.setMessage(cursor.getString(2));
contact.setStatus(cursor.getString(3));
contact.setTimestamp(cursor.getString(4));
contact.setType(cursor.getString(5));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
// return contact list
return contactList;
}
public void closeDB() {
SQLiteDatabase db = this.getReadableDatabase();
if (db != null && db.isOpen())
db.close();
}
public int updateContact(SqlContact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CONTACTS_COLUMN_ID, contact.getID());
values.put(CONTACTS_COLUMN_DESCRIPTION, contact.getDescription());
values.put(CONTACTS_COLUMN_STATUS, contact.getStatus());
values.put(CONTACTS_COLUMN_TIMESTAMP, contact.getTimestamp());
values.put(CONTACTS_COLUMN_TYPE, contact.getType());
values.put(CONTACTS_COLUMN_MESSAGE, contact.getMessage());
// updating row
return db.update(CONTACTS_TABLE_NAME, values, CONTACTS_COLUMN_ID + " = ?",
new String[]{String.valueOf(contact.getStatus())});
}
// Deleting single contact
public void deleteContact(SqlContact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from " + CONTACTS_TABLE_NAME);
// db.delete(CONTACTS_TABLE_NAME, CONTACTS_COLUMN_ID + " = ?",
// new String[] { String.valueOf(contact.getStatus()) });
db.close();
}
// Getting contacts Count
public int getContactsCount() {
String countQuery = "SELECT * FROM " + CONTACTS_TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
}
My Contacts Class:
public class SqlContact {
private int _id;
private String description;
private String message;
private String status;
private String timestamp;
private String type;
public SqlContact(int id, String description, String message, String status, String timestamp, String type) {
this._id = id;
this.description = description;
this.message = message;
this.status = status;
this.timestamp = timestamp;
this.type = type;
}
public SqlContact() {
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getID() {
return this._id;
}
// setting id
public void setID(int id) {
this._id = id;
}
}