如何最好地处理android中的数据库?

时间:2015-12-20 09:24:13

标签: android performance static

我有一个像这样定义的android DB Adapter类:

public class DBAdapter
{                 
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {
            db.execSQL(DATABASE_CREATE_PORTF);
            db.execSQL(DATABASE_CREATE_SERIES);
        }

        public void reset(SQLiteDatabase db) {
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_PORTF);
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_SERIES);
            onCreate(db);
        }       
    }

    // actual table stuff comes here. 

现在,稍后在代码中,在其他一些类中,我循环遍历不同的项目,对于每个项目,我需要更新数据库中的表。我可以想到两种方法:

void updateDatabase(item) {
    DBAdapter db = new DBAdapter(this);
    db.open();
    // update tables, rows, whatever
    db.close();
}

for (Item item: myItems) {
     updateDatabase(item);
}

或者我可以这样做:

void updateDatabase(db, item) {
    // update tables, rows, whatever
}

DBAdapter db = new DBAdapter(this);
db.open();
for (Item item: myItems) {
     updateDatabase(db, item);
}
db.close();

我的猜测是第二种方式是要走的路。但在这种情况下,我必须传递db对象而不仅仅是一个级别,而是三个级别。还是有另一种处理这种“简单”和有效方式的方法吗? (通过'简单'我的意思是避免使用不重要的/管理代码行。)

0 个答案:

没有答案