Android SQLite如何获取特定列:行值

2023-12-07

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

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))退货声明中的下一项也是如此

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

Cursor 函数没有提供许多其他方法来检索值,因此洞察力值得赞赏!


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

如果需要迭代多个结果,那么在调用之后mCursor.moveToFirst(),您可以使用mCursor.moveToNext()方法一一遍历结果行。当到达数据集末尾时,它再次返回 false。

希望这是有道理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SQLite如何获取特定列:行值 的相关文章

随机推荐