0

DBHelper.java

public class DBHelper extends SQLiteOpenHelper{

    public DBHelper(Context context) {
        super(context, DBConstants.DATABASE_NAME, null,DBConstants.DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DBConstants.CREATE_LOGINTABLE);
        db.execSQL(DBConstants.CREATE_DATA_TABLE);
        db.execSQL(DBConstants.CREATE_LATEST_DATA_TABLE);
        db.execSQL(DBConstants.CREATE_ALERTS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(DBConstants.DELETE_LOGINTABLE);
        db.execSQL(DBConstants.DELETE_DATA_TABLE);
        db.execSQL(DBConstants.DELETE_LATEST__DATA_TABLE);
        db.execSQL(DBConstants.DELETE_ALERTS_TABLE);
        onCreate(db);
    }

    @Override
    public synchronized void close() {
        super.close();
    }
}

Class1(我的应用程序中的一个活动或片段):

DBHelper myDbHelper=new DBHelper(context);
SQLiteDatabase myDB = myDbHelper.getWritableDatabase();

Cursor c1= myDB.query(DBConstants.LATEST_DATA_TABLE,mycolumns, null, null, null, null, null);
  /* is it correct */
c1.close();
myDB.close();
myDbHelper.close();
/* is it correct */

Class2(我的应用程序中的一个活动或片段):

DBHelper myDbHelper=new DBHelper(context);
SQLiteDatabase myDB = myDbHelper.getWritableDatabase();

Cursor c1= myDB.query(DBConstants.LATEST_DATA_TABLE,mycolumns, null, null, null, null, null);

/* is it correct */
c1.close();
myDB.close();
myDbHelper.close();
/* is it correct */

在这里,我是要关闭所有 c1、myDB、myDbHelper 对象还是关闭 c1 和 myDbHelper 就足够了?哪个是最佳实践?

4

1 回答 1

1
  • myDbHelper.close()在内部关闭数据库。所以不需要打电话myDb.close
  • 当然,c1.close()这是您想要习惯的最佳实践。

代码:

try {
    //your database queries.
} catch (...) {

} finally {
    if (cursor != null && !cursor.isClosed()) {
        c1.close();
    }
    myDbHelper.close();
}

finally 块将确保无论发生什么都释放这些资源。

于 2012-12-25T09:50:11.640 回答