Login     Sign Up
Cyril Sermon (@admin)
9 months ago
47 Views

It’s good practice to create a helper class to simplify your database interactions.

Consider creating a database adapter, which adds an abstraction layer that encapsulates database inter-actions. It should provide intuitive, strongly typed methods for adding, removing, and updating items. A database adapter should also handle queries and wrap creating, opening, and closing the database.

It’s often also used as a convenient location from which to publish static database constants, including table names, column names, and column indexes.

The following snippet shows the skeleton code for a standard database adapter class. It includes an exten-sion of the SQLiteOpenHelper class, used to simplify opening, creating, and upgrading the database.

import android.content.Context;

import android.database.*;

import android.database.sqlite.*;

import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log;

public class MyDBAdapter {

private static final String DATABASE_NAME = “myDatabase.db”; private static final String DATABASE_TABLE = “mainTable”; private static final int DATABASE_VERSION = 1;

The index (key) column name for use in where clauses. public static final String KEY_ID=”_id”;

The name and column index of each column in your database. public static final String KEY_NAME=”name”;

public static final int NAME_COLUMN = 1;

TODO: Create public field for each column in your table.

SQL Statement to create a new database.

private static final String DATABASE_CREATE = “create table “ + DATABASE_TABLE + “ (“ + KEY_ID +

“ integer primary key autoincrement, “ + KEY_NAME + “ text not null);”;

Variable to hold the database instance private SQLiteDatabase db;

Context of the application using the database.

private final Context context;

Database open/upgrade helper private myDbHelper dbHelper;

public MyDBAdapter(Context _context) {

context = _context;

dbHelper = new myDbHelper(context, DATABASE_NAME, null,

DATABASE_VERSION);

}

public MyDBAdapter open() throws SQLException { db = dbHelper.getWritableDatabase();

return this;

}

public void close() {

db.close();

}

public long insertEntry(MyObject _myObject) { ContentValues contentValues = new ContentValues();

TODO fill in ContentValues to represent the new row return db.insert(DATABASE_TABLE, null, contentValues);

}

public boolean removeEntry(long _rowIndex) {

return db.delete(DATABASE_TABLE, KEY_ID +

“=” + _rowIndex, null) > 0;

}

public Cursor getAllEntries () {

return db.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME}, null, null, null, null, null);

}

public MyObject getEntry(long _rowIndex) {

MyObject objectInstance = new MyObject();

TODO Return a cursor to a row from the database and

use the values to populate an instance of MyObject return objectInstance;

}

public int updateEntry(long _rowIndex, MyObject _myObject) { String where = KEY_ID + “=” + _rowIndex;

ContentValues contentValues = new ContentValues();

//TODO fill in the ContentValue based on the new object return 

db.update(DATABASE_TABLE, contentValues, where, null);

}

private static class myDbHelper extends SQLiteOpenHelper {

public myDbHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

Called when no database exists in disk and the helper class needs to create a new one.

@Override

public void onCreate(SQLiteDatabase _db) {

_db.execSQL(DATABASE_CREATE);

}

Called when there is a database version mismatch meaning that

the version of the database on disk needs to be upgraded tot he current version.

@Override

public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {

// Log the version upgrade. Log.w(“TaskDBAdapter”, “Upgrading from version “ +

_oldVersion + “ to “ +

_newVersion +

“, which will destroy all old data”);

Upgrade the existing database to conform to the new version.

Multiple previous versions can be handled by comparing

_oldVersion and _newVersion values.

The simplest case is to drop the old table and create a

new one.

_db.execSQL(“DROP TABLE IF EXISTS “ + DATABASE_TABLE);

Create a new one. onCreate(_db);

}

}

}