我有一个像这样定义的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
对象而不仅仅是一个级别,而是三个级别。还是有另一种处理这种“简单”和有效方式的方法吗? (通过'简单'我的意思是避免使用不重要的/管理代码行。)