我在android studio中使用SQLite数据库。我的onCreate代码:
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MOODS_TABLE = "CREATE TABLE " + TABLE_NAME_MOODS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_MOODS + " TEXT NOT NULL)";
db.execSQL(CREATE_MOODS_TABLE);
}
和我的查询:
@Override
public Uri insert(@NonNull Uri uri, ContentValues values) {
final SQLiteDatabase db = mMindsDbHelper.getWritableDatabase();
final SQLiteDatabase db2 = mMindsDbHelper.getReadableDatabase();
long id = db.insert(TABLE_NAME_MOODS, null, values);
String query = "SELECT * FROM "+ TABLE_NAME_MOODS;
Cursor returnCursor;
returnCursor = db2.rawQuery(query, null);
return null;
}
出于调试目的,我在这个地方添加了选择查询。 当调试器点击这些点时,db.insert的返回id返回一些值(即新插入值的id)。但是select查询不返回任何有用的东西(它将mCount返回为-1)。 我也尝试过查询,但结果是一样的。
returnCursor = db.query(TABLE_NAME_MOODS,
projection,
selection,
selectionArgs,
null,
null,
sortOrder);
问题出在哪里。
答案 0 :(得分:1)
但是select select不会返回任何有用的东西(它将mCount返回为-1)
rawQuery()
编译查询但不执行它。因此,对于尚未执行的查询,计数为-1。这同样适用于query()
,因为它基本上只是rawQuery()
的包装器。执行并匹配没有记录的查询将其计数设置为0。
要实际执行使用rawQuery()
编译的查询的至少一个步骤,您需要在返回的moveTo...()
上调用其中一个Cursor
方法。例如,moveToFirst()
。