2015-10-24 44 views
0

林與SQL打在Android和發現這個問題:從我的數據庫Android的SQL遊標錯誤

即時閱讀數據:

SQLiteDatabase db = this.getReadableDatabase(); 
    cursor = db.rawQuery("SELECT * FROM " + TABLE_SINGLE_APPS + " WHERE " + COLUMN_SINGLE_PACKAGE + "=?" 
      , new String[]{packageName}); 

    SingleAppModel singleAppModel = new SingleAppModel(); 

,當我試圖讓cursor.getInt(3)在這裏:

try { 
     if (cursor.getCount() != 0) { 
      if (cursor.moveToFirst()) { 
       singleAppModel.setId(cursor.getInt(0)); 
       singleAppModel.setAppName(cursor.getString(1)); 
       singleAppModel.setPackageName(cursor.getString(2)); 
       singleAppModel.setState(cursor.getInt(3) == 1); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    cursor.close(); 
    db.close(); 

它會返回錯誤:

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0` 

奇怪的是,如果我刪除線我在調用cursor.getInt(3),它的作品。 具有該值的Colum存在,並確定其類型INTEGER。

另外cursor.getColumnCount()的值是4和cursor.getCount的值()是1 ...所以有definetly一些數據...

任何意見?

謝謝。

+0

的的onCreate和onUpgrade方法,我覺得你的光標是不是你期待什麼。嘗試將調試點放在if條件並檢查數據是否到來 –

+0

調試點是什麼意思?我是一種初學者程序員,所以如果你能更準確,我會非常感激。 –

回答

1

而不是使用*我建議你使用,

cursor = db.rawQuery("SELECT COL0, COL1, COL2, COL3 FROM " + TABLE_SINGLE_APPS + " WHERE " + COLUMN_SINGLE_PACKAGE + "=?" 
      , new String[]{packageName}); 

根據你的表使用適當的值COL0, COL1, COL2, COL3。 這樣你就可以確保查詢中列的順序。

但根據這一點,

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0` 

我需要更多的信息來確認,你可以添加你的表模式,根據問題出現在數據庫中沒有生第三列。

編輯:

這可能是一個小程序員失誤,

查找出在SQLiteOpenHelper實施

+0

字符串CREATE_SINGLE_APPS_TABLE = 「CREATE TABLE」 + TABLE_SINGLE_APPS + 「(」 + COLUMN_SINGLE_ID + 「INTEGER PRIMARY KEY AUTOINCREMENT,」 + COLUMN_SINGLE_NAME + 「TEXT」 + COLUMN_SINGLE_PACKAGE + 「TEXT」 + COLUMN_SINGLE_STATE + 「INTEGER」 + 「)」 ; –

+0

有一個很大的可能性,你的android應用程序正在使用早期版本的數據庫,有一種處理這種情況的特定方式,你可以卸載應用程序並重新安裝它,這樣它將重新創建數據庫。 –

+0

不,我已經嘗試了很多次..我甚至刪除了數據庫manualy並重新創建它.. –