有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    将数据库访问器类实现为一个单例,例如,MyDatabase

    其中有一个扩展SQLiteHelper的内部类,根据需要重写onCreate()onUpdate()

    在该单例对象的内部类的构造函数中创建。然后让你的单例提供你需要的API。在实现该API时,您的单例将使用其内部的SQLiteHelper派生类来实现query()等等

    然后,从任何地方,包括一个AsyncTask,使用MyDatabase.INSTANCE.myDbQuery()

    Singleton是正确的抽象,因为您只有一个数据库(可能有许多表)