1

http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

i am doing the tutorial in the above link but i have problem getting one single entry or row in the database the tutorial only showed how to get all entry im confused on how to get single row entry in the database here is the code for getting all entry

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);

here is the helper

DatabaseHandler.java
package com.androidhive.androidsqlite;

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);
    }

    // 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);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations
     */

    // 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();
    }

}
Giru Bhai
  • 14,370
  • 5
  • 46
  • 74
  • are you using getContact function for single entry? – Giru Bhai Jun 17 '14 at 05:50
  • If you want to get only one record from DB then just add "LIMIT 1" to your query: http://www.sqlite.org/lang_select.html#limitoffset http://stackoverflow.com/a/6361710/1001401 – nfirex Jun 17 '14 at 05:51
  • @GiruBhai i want to use this function getContact(int id) since it is already there...but i dont know how to use it i tried doing it like this Contact single = db.getcontact(id) id is the id of the one i want but it gets error –  Jun 17 '14 at 05:58
  • bounty not for this question..lol – Giant Jul 14 '14 at 02:05
  • @HakHak Please explain more in detail. – Giru Bhai Jul 14 '14 at 05:04
  • sorry this is not the question i want to put bounty on @GiruBhai – Giant Jul 14 '14 at 07:24

1 Answers1

4

To get single contact call getContact funcation as(where conctID is the ID of contact which you want from database.)

Contact contacts = db.getContact(conctID); 

And try to add public before your Contact getContact(int id) {.

Giru Bhai
  • 14,370
  • 5
  • 46
  • 74
  • i want to use this function getContact(int id) since it is already there...but i dont know how to use it i tried doing it like this Contact single = db.getcontact(id) id is the id of the one i want but it gets error that is the idea i have but i dont know why i get error can you be more specific? the id i used is like this contact.getInt(0) but i get error... –  Jun 17 '14 at 05:59
  • wait i will try it out be right back on you on this...public in the helper? –  Jun 17 '14 at 06:02
  • one last question mate do i need to put db.close for all activity and for every time i use any method in db handler? –  Jun 17 '14 at 06:06
  • 1
    @satinekianne see this post and try to implement your helper like that.you will get all your answers. http://stackoverflow.com/questions/23387405/android-database-cannot-perform-this-operation-because-the-connection-pool-has/24201387#24201387 – Giru Bhai Jun 17 '14 at 06:10
  • @satinekianne Happy to help,enjoy coding. – Giru Bhai Jun 17 '14 at 06:17