Android How to - Create Database Helper Class








A good practice for dealing with databases is to create a helper class to encapsulate all the complexities of accessing the data.

Example

package com.java2s.myapplication3.app;
// ww  w . j ava 2  s.co  m
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter {
    static final String KEY_ROWID = "_id";
    static final String KEY_NAME = "name";
    static final String KEY_EMAIL = "email";
    static final String TAG = "DBAdapter";

    static final String DATABASE_NAME = "MyDB";
    static final String DATABASE_TABLE = "contacts";
    static final int DATABASE_VERSION = 1;

    static final String DATABASE_CREATE =
            "create table contacts (_id integer primary key autoincrement, "
                    + "name text not null, email text not null);";

    final Context context;

    DatabaseHelper DBHelper;
    SQLiteDatabase db;

    public DBAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {
            try {
                db.execSQL(DATABASE_CREATE);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }
    }
    //opens the database
    public DBAdapter open() throws SQLException
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //closes the database
    public void close()
    {
        DBHelper.close();
    }

    //insert a contact into the database
    public long insertContact(String name, String email)
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_NAME, name);
        initialValues.put(KEY_EMAIL, email);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //deletes a particular contact
    public boolean deleteContact(long rowId)
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    //retrieves all the contacts
    public Cursor getAllContacts()
    {
        return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                KEY_EMAIL}, null, null, null, null, null);
    }

    //retrieves a particular contact
    public Cursor getContact(long rowId) throws SQLException
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                                KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null,
                        null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //updates a contact
    public boolean updateContact(long rowId, String name, String email)
    {
        ContentValues args = new ContentValues();
        args.put(KEY_NAME, name);
        args.put(KEY_EMAIL, email);
        return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
}




Add Contacts

The following code demonstrates how you can add a contact to the table.

      import android.app.Activity;
      import android.os.Bundle;
//from   w w w .  j  av  a2  s  . c o  m
      public class DatabasesActivity extends Activity {
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);

              DBAdapter db = new DBAdapter(this);

              //add a contact
              db.open();
              long id = db.insertContact("Jack", "xml@example.com");
              id = db.insertContact("Jane", "html@example.com");
              db.close();
          }
       }




Retrieve All the Contacts

         import android.app.Activity;
         import android.database.Cursor;
         import android.os.Bundle;
         import android.widget.Toast;
/*from   ww  w. ja  v a 2 s  . c o  m*/
         public class DatabasesActivity extends Activity {
             @Override
             public void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);

                 DBAdapter db = new DBAdapter(this);


              //get all contacts
              db.open();
              Cursor c = db.getAllContacts();
              if (c.moveToFirst())
              {
                  do {
                      DisplayContact(c);
                  } while (c.moveToNext());
              }
              db.close();
          }

          public void DisplayContact(Cursor c)
          {
              Toast.makeText (this,
                      "id: " + c.getString(0) + "\n" +
                      "Name: " + c.getString(1) + "\n" +
                      "Email:  " + c.getString(2),
                      Toast.LENGTH_LONG).show();
          }
       }
       

Retrieve a Single Contact

@Override/*from   ww  w.ja v a  2 s .c om*/
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DBAdapter db = new DBAdapter(this);
    //get a contact
    db.open();
    Cursor c = db.getContact(2);
    if (c.moveToFirst())
       DisplayContact(c);
    else
       Toast.makeText (this, "No contact found", Toast.LENGTH_LONG).show();
    db.close();
}

Update a Contact

@Override/*from   www .j  ava  2s  . co m*/
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   DBAdapter db = new DBAdapter(this);
   //update contact
   db.open();
   if (db.updateContact(1, "XML", "XML@example.com"))
      Toast.makeText (this, "Update successful.", Toast.LENGTH_LONG).show();
   else
      Toast.makeText (this, "Update failed.", Toast.LENGTH_LONG).show();
   db.close();
}

Delete a Contact

@Override/*  w  ww.j  a v  a  2 s  .  c  o m*/
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   DBAdapter db = new DBAdapter(this);

   //delete a contact
   db.open();
   if (db.deleteContact(1))
      Toast.makeText (this, "Delete successful.", Toast.LENGTH_LONG).show();
   else
      Toast.makeText (this, "Delete failed.", Toast.LENGTH_LONG).show();
   db.close();
}