非工作查询

问题描述:

我正在使用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); 

问题在哪里。

+1

你获得了一个游标'returnCursor',但你实际上没有做任何事情。你有没有尝试迭代这个游标? –

+0

@TimBiegeleisen在调试窗口中显示returnCursor的所有细节。它只返回列名,mCount为-1​​; –

+0

@EnigmaticMind游标,直到你做了什么,它会显示这一点。尝试添加'returnCursor.getCount();'行,然后移动以返回null;在调试中。你会看到计数。你也可以尝试'returnCursor.movetoFirst()'作为一行(等)。你也可能会发现这有用[有没有任何方法可以帮助解决常见的SQLite问题?](https://*.com/questions/46642269/are-there-any-methods-that-assist-with-resolving-common -sqlite-issues) – MikeT

但选择查询不返回任何有用的东西(它返回mCount为-1​​)

rawQuery()编译查询,但不执行它。因此,对于尚未执行的查询,计数为-1。这同样适用于query(),因为它基本上只是rawQuery()的包装。这是执行,没有匹配记录的查询将有其计数设置为0。

实际执行与rawQuery()编译查询的至少一个步骤,你需要调用的返回CursormoveTo...()方法之一。例如,moveToFirst()

+0

非常感谢。它节省了我的时间。 –