我总是使用下面的代码来获取所有信息
但我有疑问 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);
}
答案 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();