这是站长在做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就有现成对象可以用了,不用每次创建了。