我可以从活动中访问SQLite数据库。但如果我在服务中遵循相同的程序,不幸的是关闭。
这是我试过的
创建数据库
db = openOrCreateDatabase("DB", MODE_MULTI_PROCESS, null);
db.execSQL("CREATE TABLE IF NOT EXISTS MYTABLE (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, VAL VARCHAR)");
插入值
String sql = "INSERT INTO MYTABLE(VAL) VALUES ('" + edVal.getText().toString() + "');";
db.execSQL(sql);
检索数据
Cursor c;
c = db.rawQuery("SELECT VAL FROM MYTABLE", null);
c.moveToFirst();
if(c.getCount() > 0)
{
...
}
由于我从我的活动中插入数据,所以我没有发现任何问题。但我想在服务中检索数据。从执行创建游标的行的服务来看,它很遗憾地被关闭了。我可以在服务中创建游标吗?或者我怎样才能从数据库中读取数据?
答案 0 :(得分:1)
这名男子凯文是一个传奇: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);
}