2013-07-19 34 views
1

我在我的sqlite數據庫中使用一個配置表。這具有以下組成:CursorIndexOutOfBoundsException拋出cursor.getString()

private static final String DATABASE_CONFIG_CREATE = 
    "CREATE TABLE " + TABLE_CONFIGS 
    + "(" 
     + CONFIG_HIDDEN_CATEGORIES + " TEXT DEFAULT '1,2' NULL" 
    + ");"; 

後來我嘗試用下面的代碼來訪問:

Cursor cursor = database.query(DatabaseHelper.TABLE_CONFIGS, new String[] {DatabaseHelper.CONFIG_HIDDEN_CATEGORIES}, null, null, null, null, null); 
try { 
    cursor.moveToFirst(); 

    int test = cursor.getCount(); 

    String data = cursor.getString(0); 

} 
catch (Exception exception) { 

但線cursor.getString(0)引發以下exeption(可變測試是0):

android.database.CursorIndexOutOfBoundsException:請求索引0, ,大小爲0

當我運行下面的代碼時,列CONFIG_HIDDEN_CATEGORIES顯示給我......出了什麼問題?

Cursor dbCursor = database.query(DatabaseHelper.TABLE_CONFIGS, null, null, null, null, null, null); 
    String[] columnNames = dbCursor.getColumnNames(); // index 0 is the value of CONFIG_HIDDEN_CATEGORIES 

回答

2

這意味着您的Cursor爲空。你應該換你的行動來糾正條件:

try { 
    if (cursor.moveToFirst()) { 
     String data = cursor.getString(cursor.getColumnIndex("columnName")); 
     // do your stuff 
    } 
    else { 
     // cursor is empty 
    } 
} 
... 

你實際的代碼將無法正常工作正確的,因爲你只是打電話moveToFirst()方法,但你不知道(未測試),如果它會返回true或false。

只有當Cursor不爲空時,您的代碼才能正確使用。在第二種情況下,它不會工作。

注意:我建議您使用getColumnIndex(<columnName>)方法獲取列索引,因爲它的名稱。此方法更安全,更易讀。

+0

好的,但爲什麼'cursor'empty?我不修改表...並且默認值爲1,2 – David

+0

@David,因此您的數據庫爲空e.q.沒有排。 – Sajmon

+0

omg ...謝謝...腦力衰竭 – David

相關問題