【发布时间】:2016-05-03 04:54:08
【问题描述】:
我想在具有 2 行数据的表上迭代游标。我的第一次尝试是:
c.moveToFirst();
while(!c.isAfterLast()){
//this code runs once
c.moveToNext();
}
但是在调试后我注意到我丢失了最后一行数据。这是因为当 mPos 变量等于计数器中的 mCount 时,while 循环结束。用下面的代码替换上面的代码后,问题就解决了:
c.moveToFirst();
do{
//this code runs twice
}while(c.moveToNext())
基本上在第一种方法中,while 循环的运行时间比第二种方法少 1 次。 isAfterLast 不是应该只有在光标经过最后一行后才返回 true 吗?
【问题讨论】:
-
你确定在第一个代码块中,
c.moveToNext()是 while 循环内的最后一行代码吗?两者都应该做同样的事情。 -
如果在只有一行数据的游标上运行第一个代码块会发生什么?它会导致循环体根本不执行吗?这是否意味着 c.isAfterLast() 在调用 c.moveToFirst() 后立即返回 true?
-
那么,如果你在 empty 光标上运行第一个块会发生什么?它会抛出异常吗?
-
@DanielNugent 是的,我确定它在结尾
-
@jason44107 非常好。我明天早上会测试并更新问题的详细信息