活动和后台服务访问SQLite数据库

时间:2013-06-27 16:35:21

标签: android sqlite android-activity android-service android-sqlite

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

我很担心,并且已经看到,对数据库的多次打开调用发生冲突,并抛出异常。因为我在Activity和Service类中查询数据库,所以我试图在这里推荐Commonsware解决方案:When to close db connection on android? Every time after your operation finished or after your app exit。但是,如果Activity可能需要,我不想关闭然后在Service类中打开数据库。从这个答案Why use SQLiteOpenHelper over SQLiteDatabase?来看,实现SQLiteOpenHelper以解决进行多次调用的问题似乎是有意义的。

非常感谢你的帮助!!

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:-2)

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

  /** Call after close activity */
@Override
protected void onStop() {
    super.onStop();
    //Close dataSource
    datasource.close();
}