我在sqlite数据库中使用一个配置表。它具有以下组成:
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)
抛出以下示例(变量测试为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
最佳答案
这意味着您的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>)
方法获取列索引。此方法更安全,更易于理解。