2017-10-21 92 views
0

我正在使用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://stackoverflow.com/questions/46642269/are-there-any-methods-that-assist-with-resolving-common -sqlite-issues) – MikeT

回答

1

但選擇查詢不返回任何有用的東西(它返回mCount爲-1​​)

rawQuery()編譯查詢,但不執行它。因此,對於尚未執行的查詢,計數爲-1。這同樣適用於query(),因爲它基本上只是rawQuery()的包裝。這是執行,沒有匹配記錄的查詢將有其計數設置爲0。

實際執行與rawQuery()編譯查詢的至少一個步驟,你需要調用的返回CursormoveTo...()方法之一。例如,moveToFirst()

+0

非常感謝。它節省了我的時間。 –