打开和关闭SqliteDatabase

时间:2014-03-08 06:21:55

标签: android android-listview android-asynctask android-sqlite android-cursoradapter

我正在从java转向android开发。以前我在java工作过Hybernates。所以android sqlite数据库处理有点让我困惑。我正在使用单例数据库助手类,并创建了在我的助手类本身内打开和关闭daabase的方法,如下所示......

public class DatabaseManager extends SQLiteOpenHelper {
 private static DatabaseManager instance;
 public static DatabaseManager getInstance(Context context) {
    if (instance == null)
        instance = new DatabaseManager(context);
    return instance;
}
public static DatabaseManager getInstance() {
    return instance;
}
 @Override
public void onCreate(SQLiteDatabase db) {
    //CREATING TABLES...
}
 public SQLiteDatabase getReadableDatabase(String logMsg) {
    Log.d(TAG, "Readable database opening from :" + logMsg);
    return super.getReadableDatabase();
}

public SQLiteDatabase getWritableDatabase(String logMsg) {
    Log.d(TAG, "Writable database opening from :" + logMsg);
    return super.getWritableDatabase();
}

public void closeDb(SQLiteDatabase db, String logMsg) {
    db.close();
    Log.d(TAG, "Closing db from :" + logMsg);
}
}

现在我的情况我正在开发一个消息传递应用程序。因为会有一些侦听器在运行,它们会在应用程序db的其中一个表中插入/检索数据。我计划在我的活动中使用内容提供程序从消息表中加载带有ResourceCursorAdapter的listview。如果我在后台和活动期间打开和关闭数据库(onResume,onPause)会导致问题吗?如果这不是正确的方法,我应该如何处理这种情况?提前谢谢....

1 个答案:

答案 0 :(得分:0)

最好不要让数据库保持打开状态太长时间。由于许多生命周期事件可能会或可能不会发生,因此最好只在需要时打开数据库,在数据库中执行所有操作并立即关闭。

因此,除非您计划使用它们来集中其他一些操作(就像您对日志记录所做的那样),否则您并不需要类中的最后3个方法。