ITEEDU

SQLiteOpenHelper示例

这是站长在做SMS开发时做的相关数据库。在这里SQLiteOpenHelper被封闭到了一个SmsDBAdapter类中,在创建SmsDBAdapter时会生成SQLiteOpenHelper对象mDbHelper。SmsDBAdapter中主要是放置SMS的数据库接口的,SMS的增删改查等相关函数都在这个类里面。

public class SmsDBAdapter {
	private DatabaseHelper mDbHelper;
	private SQLiteDatabase mDb;
	private final Context context;

	private class DatabaseHelper extends SQLiteOpenHelper {
		DatabaseHelper(Context context) {
			//第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类
			super(context, context.getString(R.string.DB_NAME), null, Integer
					.parseInt(context.getString(R.string.DB_VERSION)));
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(context.getString(R.string.CREATE_BLACK_LIST));
			...
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		}
	}

	public SmsDBAdapter(Context ctx) {
		this.context = ctx;
		mDbHelper = new DatabaseHelper(context);
	}

	public SmsDBAdapter getWritableDatabase() throws SQLException {
		mDb = mDbHelper.getWritableDatabase();
		return this;
	}

	public SmsDBAdapter getReadableDatabase() throws SQLException {
		mDb = mDbHelper.getReadableDatabase();
		return this;
	}

	public void closeSmsDB() {
		mDbHelper.close();
	}
	//下面为SMS处理的接口
	public int deleteWasteSms(long id) {
if (id == -1)
return mDb.delete(context.getString(R.string.TN_WASTE_SMS), null,
null);
return mDb.delete(context.getString(R.string.TN_WASTE_SMS),
CV.CN_SMS_ID + "=" + id, null);
} ... }

用法

SmsDBAdapter mDbHelper = new SmsDBAdapter(this);
mDbHelper.getReadableDatabase();
cur = mDbHelper.getCommonNum(null);//调用mDbHelper中的方法
startManagingCursor(cur);
...
mDbHelper.closeSmsDB();

在实际的应用中,SmsDBAdapter会是自定义Application中的一成员,这样在程序运行时SmsDBAdapter就有现成对象可以用了,不用每次创建了。