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就足够了?哪种是最佳做法?
答案 0 :(得分:1)
myDbHelper.close()
在内部关闭数据库。所以无需致电myDb.close
。c1.close()
是您想要习惯的最佳做法。代码:
try {
//your database queries.
} catch (...) {
} finally {
if (cursor != null && !cursor.isClosed()) {
c1.close();
}
myDbHelper.close();
}
finally块将确保无论发生什么都释放这些资源。