我有一个数据库,我正在使用以下命令对其进行查询
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) != ''
在我的SQLite浏览器中,使用原始的SQL查询可以显示相关的行,因此游标对象应该包含相同的结果。
其次,在我的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)),返回语句中的下一项也抛出了异常
我对如何检索特定的行值感到困惑!因为我已经提取了数据库并运行了相同的查询,并且可以清楚地看到我想要的两个值都确实存在!
游标函数没有提供很多其他的方法来检索值,所以我很欣赏你的见解!
发布于 2011-07-12 00:56:50
您需要将游标定位到第一行,然后才能从中获取数据。为此,您可以调用:mCursor.moveToFirst()。此外,此方法调用返回一个布尔值,如果没有结果,该布尔值将为false;因此,您还可以使用它来防止出现这种情况。
如果需要遍历多个结果,那么在调用mCursor.moveToFirst()之后,可以使用mCursor.moveToNext()方法逐个遍历结果行。当它到达数据集的末尾时,它再一次返回false。
希望这是有意义的。
发布于 2012-06-27 17:30:34
您可以像这样迭代游标...
Cursor c=dbhelper.getQueById(i);
if(c.getCount()>0)
{
for(c.moveToFirst();!c.isAfterLast();c.moveToNext())
{
txt1.setText(c.getString(0));
txt2.setText(c.getString(1));
txt3.setText(c.getString(2));
}
}
else
{
Log.d(" Null value in cursor ", " null ");
}
c.close();
dbhelper.close();发布于 2011-07-12 00:57:11
在尝试调用mCursor.getString之前,请先尝试调用mCursor.moveToFirst()。
https://stackoverflow.com/questions/6653502
复制相似问题