如何在android中最好地处理数据库?
我有一个android DB适配器类,定义如下:如何在android中最好地处理数据库?,android,performance,static,Android,Performance,Static,我有一个android DB适配器类,定义如下: public class DBAdapter { private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBH
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
对象,不仅仅是一个级别,而是三个级别。或者有没有另一种“简单”而有效的方法来处理这个问题?(我所说的“简单”是指避免使用不重要的/管理代码行)。就我个人而言,我使用第一种方法,因为它可以保持我的活动/片段类代码干净整洁。您还可以在onCreate中打开数据库,并在onPause或onDestroy中关闭它。您也可以使用第一个代码。但这会严重影响性能吗?我不知道这在幕后是如何处理的,,,我不认为有任何理由每次都打开和关闭数据库。我会选择第二种解决方案,因为打开它一次,进行更改,然后关闭它似乎更有效。