5

我想检查一个 SQLite 数据库是否打开,如果是,我想在服务类中访问该数据库。

我担心并且已经看到,对数据库的多个打开调用会发生冲突并引发异常。因为我确实在我的 Activity 和 Service 类中查询了数据库,所以我正在尝试实施 Commonsware 推荐的解决方案:When to close db connection on android?每次操作完成后或应用退出后。但是,如果活动可能需要它,我不想在服务类中关闭然后打开数据库。从这个答案为什么在 SQLiteDatabase 上使用 SQLiteOpenHelper?,看起来实现一个 SQLiteOpenHelper 来解决多次调用的问题可能是有意义的。

非常感谢您的帮助!!

4

2 回答 2

5

这个人凯文是一个传奇:http ://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection 。太感谢了。

在那个链接上,他分享了他非常简单的解决方案:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static DatabaseHelper instance;

    public static synchronized DatabaseHelper getHelper(Context context)
    {
        if (instance == null)
            instance = new DatabaseHelper(context);

        return instance;
    }
    //Other stuff... 
} 

然后在我的 SQLite 类中,我将代码更改为如下所示:

public BlacklistWordDataSource(Context context) {
    dbHelper = MySQLiteHelper.getHelper(context);
}
于 2013-06-27T17:35:48.670 回答
-2

在活动中的 onCreat 中放置 datasource.open(); 然后做任何你想做的事,并在活动结束时将其关闭:

  /** Call after close activity */
@Override
protected void onStop() {
    super.onStop();
    //Close dataSource
    datasource.close();
}
于 2013-06-27T16:48:31.653 回答