我想检查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以解决进行多次调用的问题似乎是有意义的。
非常感谢你的帮助!!
答案 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();
}