我创建了以下方法来从数据库中检索存储的设置:
public String getEntry(long rowIndex){
String value = "";
Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_NAME, VALUE}, KEY_NAME + "=" + rowIndex, null, null, null, null);
int columnIndex = c.getColumnIndex(VALUE);
int rowsCount = c.getCount();
if(rowsCount > 0){
String value = c.getString(columnIndex);
}
return value;
}
在调试时,我可以看到游标 c 包含两列和一行,但是当涉及到行时
String value = c.getString(columnIndex);
它会抛出 CursorIndexOutOfBoundsException,尽管 columnIndex = 1 应该指向一个有效条目。
有谁知道这里可能出了什么问题吗?
最佳答案
我不知道你用的DB-Wrapper,但我想做两个猜测,因为我对Sqlite有点了解。
它可能是:
在我的包装器和 C-API 中,每次您想要检索数据时都需要执行一个步骤(或下一步)。您的异常表明您没有位于正确的行。因此,您可以尝试“下一步”或“步骤”(您的 DB-Wrapper 所能理解的)。
c.getCount()
也可能带来麻烦。 getCount 可以做什么,依靠游标?它可以迭代游标直到完成。发生这种情况时,光标已用完,您只能重做整个事情。在这一点上阅读会抛出你得到的东西。为了避免出现问题而不需要读取表格两次,您应该自己读取所有行并自己进行计数。在您的 DB-Wrapper 中应该有一些方法(例如抛出的异常或状态),您可以在其中检查您的光标是否已用完。
当我正确理解您的 DB-Wrapper 时,其中一个可能是问题所在。
关于database - Android:从数据库问题中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108170/