非工作查询
问题描述:
我正在使用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);
问题在哪里。
答
但选择查询不返回任何有用的东西(它返回mCount为-1)
rawQuery()
编译查询,但不执行它。因此,对于尚未执行的查询,计数为-1。这同样适用于query()
,因为它基本上只是rawQuery()
的包装。这是执行,没有匹配记录的查询将有其计数设置为0。
实际执行与rawQuery()
编译查询的至少一个步骤,你需要调用的返回Cursor
的moveTo...()
方法之一。例如,moveToFirst()
。
+0
非常感谢。它节省了我的时间。 –
你获得了一个游标'returnCursor',但你实际上没有做任何事情。你有没有尝试迭代这个游标? –
@TimBiegeleisen在调试窗口中显示returnCursor的所有细节。它只返回列名,mCount为-1; –
@EnigmaticMind游标,直到你做了什么,它会显示这一点。尝试添加'returnCursor.getCount();'行,然后移动以返回null;在调试中。你会看到计数。你也可以尝试'returnCursor.movetoFirst()'作为一行(等)。你也可能会发现这有用[有没有任何方法可以帮助解决常见的SQLite问题?](https://*.com/questions/46642269/are-there-any-methods-that-assist-with-resolving-common -sqlite-issues) – MikeT