我有一个数据库,并且正在使用它进行查询

Cursor mCursor = mapDb.query(MY_TABLE, new String[] {KEY_ONEID, KEY_TWOID}, "trim("+KEY_TWOID + ") != '' ", null, null, null, null);

用SQL的字面意思是:
SELECT OneId, TwoId FROM auth WHERE trim(TwoId) != ''

使用原始SQL查询,这可以在我的SQLite浏览器中显示给我有关的行,因此Cursor对象应该包含相同的结果。

其次,在我的java方法中,我正在使用条件检查此结果是否有任何内容

    if(mCursor.getColumnIndex(KEY_ONEID) > -1)  //if > -1 then the mCursor returned a row
    {

       if(mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)) //breaks here
                return mCursor.getString(mCursor.getColumnIndex(KEY_TWOID));
            else
                return "";
    }


但是由于某种原因,即使mCursor哈希图应该返回所有值,该下一条条件语句

mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)

仍然返回:An exception occurred: android.database.CursorIndexOutOfBoundsException

这是引发异常的行:mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)),而return语句中的下一个项目也是如此

我对如何检索特定的行值感到困惑!因为我已经拉出数据库并运行相同的查询,并且可以清楚地看到我想要的两个值实际上都存在!

游标功能没有提供许多其他方法来检索值,因此非常感谢见识!

最佳答案

您需要先将游标定位到第一行,然后才能从中获取数据。为此,您可以致电:mCursor.moveToFirst()。同样,此方法调用返回一个布尔值,如果没有结果,它将为false;否则为false。因此您也可以使用它来防范这种情况。

如果需要遍历多个结果,则在调用mCursor.moveToFirst()之后,可以使用mCursor.moveToNext()方法一个接一个地遍历结果行。再一次,它到达数据集的末尾时将返回false。

希望有道理。

07-25 22:35