Android SQLite如何获取特定列:行值
我有一个数据库,我正在使用它进行查询
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 hashmap应该返回所有值,这是下一个条件语句
mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)
仍然返回: An exception occurred: android.database.CursorIndexOutOfBoundsException
这是抛出exception的行: mCursor.getString(mCursor.getColumnIndex(KEY_ONEID))
,返回语句中的下一个项也是如此
我对如何检索特定行值感到困惑! 因为我已经拉出数据库并运行相同的查询,并且可以清楚地看到我想要的两个值,确实存在!
Cursor函数没有提供许多其他方法来检索值,因此洞察力值得赞赏!
您需要将Cursor定位到第一行,然后才能从中获取数据。 为此,您可以调用: mCursor.moveToFirst()
。 此外,此方法调用返回一个布尔值,如果没有结果,则为false; 所以你也可以用它来防范这种情况。
如果需要迭代多个结果,那么在调用mCursor.moveToFirst()
,可以使用mCursor.moveToNext()
方法mCursor.moveToNext()
遍历结果行。 再一次,当它到达数据集的末尾时返回false。
希望有道理。
你可以像这样迭代光标……
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();
在尝试调用mCursor.moveToFirst()
之前尝试调用mCursor.moveToFirst()
。
你只需要调用cursor.moveToNext()从头开始移动到下一个开始,所以我们不需要调用moveToFirst。 moveToFirst实际上是在某个东西中调用的。
while (cursor.moveToNext()) { //whatever you want to do }
- Android加密“pad block corrupted”exception
- 如何在AndEngine中更改TimerHandler延迟?
- 在Android中使用google-java-api-client获取Google日历活动的开始和结束时间
- 如何将gradle库依赖项添加到codenameone项目中
- RxJava:“java.lang.IllegalStateException:只允许一个订阅者!”
- Eclipse ADT:Java已启动但返回退出代码= 13
- java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)
- 为什么X的值不会一直到布局的边缘
- 使用Eclipse在Android虚拟机中启动Android java项目时出现问题