java在db asyncTask中包含什么更好?
我想用asyncTask包装数据库访问
以下哪项更好?为什么
(a)
AsyncTask at = new AsyncTask
{
SavedOffersSQLiteHelper savedOffersSQLiteHelper = new SavedOffersSQLiteHelper();
savedOffersSQLiteHelper.addItem(..)
}
(b)
public SavedOffersSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
// SQL statement to create book table
String CREATE_TABLE = "CREATE TABLE "
+ TABLE_NAME
+ " ( "
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "uid VARCHAR(36))";
db.execSQL(CREATE_TABLE);
}
public void addItem(Offer offer) {
///====== here ========
//AsyncTask ast = new AsyncTask {
Log.d(MyLogger.TAG, "add saved-offer");
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(KEY_UID, offer.getId().toString());
// 3. insert
db.insert(TABLE_NAME, // table
null, // nullColumnHack
values); // key/value -> keys = column names/ values = column
// values
String text = String.format("item was added to table: {0}", TABLE_NAME);
Log.d(MyLogger.TAG, text);
Toast.makeText(mContext, text, Toast.LENGTH_LONG);
// 4. close
db.close();
// }
///====end asyncTasl======
}
(c)其他
# 1 楼答案
将数据库访问器类实现为一个单例,例如,
MyDatabase
其中有一个扩展
SQLiteHelper
的内部类,根据需要重写onCreate()
和onUpdate()
在该单例对象的内部类的构造函数中创建。然后让你的单例提供你需要的API。在实现该API时,您的单例将使用其内部的
SQLiteHelper
派生类来实现query()
等等然后,从任何地方,包括一个
AsyncTask
,使用MyDatabase.INSTANCE.myDbQuery()
Singleton是正确的抽象,因为您只有一个数据库(可能有许多表)