【问题标题】:opening and closing SqliteDatabase打开和关闭 SqliteDatabase
【发布时间】:2014-03-08 06:21:55
【问题描述】:

我正在从 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);
}
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我只是对单例对象感到困惑。因为当我的 listview 使用 getReadableDatabse 加载并同时从消息接收器获取 getWritableDatabase 并且消息接收器首先完成工作并关闭数据库时会发生什么?
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多