为什么c.moveToFirst()不会跳过第一行

时间:2012-11-29 03:24:25

标签: android sqlite cursor

我总是使用下面的代码来获取所有信息 但我有疑问 c.movetoNext 导致跳过结果集的第一行
请告诉我 表面背后真正发生的事情 ,以便我能完全理解它

    SQLiteDatabase db;
    Cursor c = db.query("pic", null, null, null, null,null, null);
    c.moveToFirst();
    while(c.movetoNext)
    {
    //do something
    //example: String a=c.getString(0);
    }

5 个答案:

答案 0 :(得分:12)

你正在调用moveToFirst(),它将光标定位在第一行,然后你的while循环在进入循环之前调用moveToNext(),这导致第一行被跳过。

您可以使用do ... while循环或for循环(例如

)来解决它
for( c.moveToFirst(); !c.isAfterLast(); c.moveToNext() ) {
    // Stuff
}

答案 1 :(得分:1)

根据Cursor文档,“query ...返回:一个Cursor对象,位于第一个条目之前”。它似乎进一步queries get executed only when methods are called on the cursor。希望有所帮助。

答案 2 :(得分:1)

一个迟到的答案,但希望对其他人找到这个页面有用。我一直在使用:" if()do {} while();"环。 " moveToFirst()"如果游标中没有返回任何行,则函数返回false。 " moveToNext()"函数在游标结束时返回false:

Cursor c = db.query(......);

if (c.moveToFirst()) do {
   data = c.getString(0) // eg. get value from first column in cursor
   // do something more
} while (c.moveToNext());

c.close();

(类似于TactMayers'回答)。

答案 3 :(得分:0)

c.moveToFirst();

此行将光标移动到第一行。

while(c.movetoNext)

运行这行代码后,光标将移动到下一行(第一次运行while循环的第2行。)因此,当代码进入循环时,光标已经指向第2行并且可以永远不要访问第一行。

尝试像这样替换while循环

do {
    // do something
} while(c.movetoNext())

答案 4 :(得分:0)

实际上,您根本不必致电 c.moveToFirst();