我在内存中创建了一个数据库,如下所示:
public class DbIoDatabaseHelper extends SQLiteOpenHelper {
// public static final String DATABASE_NAME = "DbIo.db";
public static final String DATABASE_NAME = ":memory:";
private static final int DATABASE_VERSION = 1;
public DbIoDatabaseHelper(Context context) {
// super(context, DATABASE_NAME, null, DATABASE_VERSION);
super(context, null, null, DATABASE_VERSION);
this.myContext = context.getApplicationContext();
}
.........
}
在我的内容提供商中,查询如下:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
final SQLiteDatabase db = myDb.getReadableDatabase();
Cursor retCursor;
switch (sUriMatcher.match(uri)) {
case LABEL:
retCursor = db.query(
IOContract.IoEntry.TABLE_NAME,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
break;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
在我的活动中,光标是:
Cursor c = contentResolver.query(cpUri, null, selection, argms, null);
当我使用DATABASE_NAME创建数据库时,数据库是在磁盘上创建的,我将光标恢复。
public DbIoDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// super(context, null, null, DATABASE_VERSION);
this.myContext = context.getApplicationContext();
}
当我使用null在内存中创建它时,我在游标中没有元素 - 尽管返回的光标不是null。
public DbIoDatabaseHelper(Context context) {
// super(context, DATABASE_NAME, null, DATABASE_VERSION);
super(context, null, null, DATABASE_VERSION);
this.myContext = context.getApplicationContext();
}
有没有办法在内存中创建数据库时获得有效的游标,我该怎么办? 任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
谢谢XGouchet的回答。我通过以下方式解决了我的问题:我已经读过在内存中创建的数据库仅对创建它的活动可见。因此,我在OnCreate()方法的Content Provider中创建了数据库。
@Override
public boolean onCreate() {
myDbData = new DatabaseData();
myDb = new IODatabaseHelper(getContext());
initializeDb(); // method that populates the database
if (myDb == null) {
ret = false;
}
return true;
}