2013-05-30 23 views
0

我詢問與下面的查詢數據庫中的記錄:CursorIndexOutOfBoundsException表和現有

final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null); 

當我登錄光標指望它給了我1作爲計數,但是當我嘗試訪問使用數據subject_cursor.getString(0)它給了我一個錯誤說:

05-30 03:37:10.921: W/System.err(5408): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 

我已經手動檢查數據庫中的記錄和所有所需的數據存在。 (另外,如果我只是做了以下查詢:

同一個表,並給獲得計數光標它給我的現有人數是正確的記錄)。

請你幫助...

+0

然後有可能您的查詢沒有得到正確執行。執行查詢之前'cs_cursor.getString(1)'的值是多少? –

+0

@Shobhit普里它是2 – 7bluephoenix

+0

@ShobhitPuri我檢查並確認它! – 7bluephoenix

回答

2

你應該仔細閱讀整篇文章Cursor Index Out of Bounds Exception。它處理完全相同的問題,你可以在那裏得到你的問題的答案。從這個帖子開始,加入@Alexey指出的Cursorslazy loaded,你需要調用moveToFirst()moveToPosition()等方法將它們加載到內存中。 moveToFirst將光標移動到第一行,以便您可以訪問它。同樣,moveToPosition()將光標移動到絕對位置。如果不使用這些函數,它會拋出你得到的錯誤。希望這可以幫助。

+0

如果遊標是懶加載然後我如何得到列名如果我這樣做: subject_cursor.getColumnName(0); – 7bluephoenix

+1

[getColumnName](http://developer.android.com/reference/android/database/Cursor.html#getColumnName%28int%29)在給定的從零開始的列索引處返回列名稱。它不依賴於您作爲查詢結果獲得的行。所以它會起作用。 –

+0

所以在我用where子句進行查詢之後,然後使用moveToFirst或moveToPosition來獲得所需的記錄後,我將不得不用where子句再次查詢表....是不是? – 7bluephoenix

1
if(subject_cursor.moveToFirst()) 
    subject_cursor.getString(0); 
+0

如果我只是將它移動到第一個記錄,WHERE子句的用法是什麼? : -/ – 7bluephoenix

+0

好吧....你只需要我解釋遊標懶加載的東西... ShobhitPuri幫助我的那個...謝謝你的答案 – 7bluephoenix

0

更改您的代碼以

final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null); 

因爲你只有1行的表,您正在嘗試使用來獲取第二排cs_cursor.getString(1)

或者試試這個代碼,

public void getAllEvents() { 



    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_EVENTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 




      // Adding contact to list 
      MainActivity.Id.add(cursor.getString(0)); //it will store id to my array list "Id" 


     } while (cursor.moveToNext()); 
    } 


} 
+0

雅......我甚至試過,只是爲了得到相同的錯誤! – 7bluephoenix

+0

看到我編輯的答案 –

+0

第二行?該cs_cursor是爲另一個有有效數據的表(我已經確認)...並計算爲第二個表的上述查詢後是1 ....所以我找到記錄...只是我無法獲取它使用subject_cursor.getString(0)。 – 7bluephoenix

相關問題