Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:SQLite,cursor.moveToNext()总是返回false_Android_Sql_Sqlite - Fatal编程技术网

Android:SQLite,cursor.moveToNext()总是返回false

Android:SQLite,cursor.moveToNext()总是返回false,android,sql,sqlite,Android,Sql,Sqlite,以下语句cursor.moveToNext始终为false。我希望循环执行一次。我已经测试了查询是否实际返回数据 有人知道是怎么回事吗 String query ="SELECT(SELECT COUNT(*) FROM Table1) as count1, (SELECT COUNT(*) FROM Table2) as count2;"; Cursor mCursor = mDb.rawQuery(query, null); if (mCursor != null

以下语句cursor.moveToNext始终为false。我希望循环执行一次。我已经测试了查询是否实际返回数据

有人知道是怎么回事吗

    String query ="SELECT(SELECT COUNT(*) FROM Table1) as count1, (SELECT COUNT(*) FROM Table2) as count2;";

    Cursor mCursor = mDb.rawQuery(query, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }

    while (cursor.moveToNext()) {   //<---------------return false here???
        String result_0=cursor.getString(0);
    }

我知道你已经解决了你的问题,但下面是所发生情况的演练:

Cursor mCursor = mDb.rawQuery(query, null);

// At this point mCursor is positioned at just before the first record.

if (mCursor != null) {
    mCursor.moveToFirst();
    // mCursor is now pointing at the first (and only) record
}

while (mCursor.moveToNext()) {
    String result_0=cursor.getString(0);
}

// The loop above was skipped because `.moveToNext()` caused mCursor
// to move past the last record.

因此,在您只需要一条记录的情况下,您只需要mCursor.moveToFirst或mCursor.moveToNext。

您可以这样迭代光标

    if(moveCursor.moveToFirst()){
        do{
            //your code

        }while(moveCursor.moveToNext());
    }               

它是否与在查询语句中不使用FROM相关,这样SQLite就无法将其识别为有效的comand?否…您的查询应该只返回一行,因此当您使用cursor.moveToFirst时,您位于第一行。。。现在任何调用moveToNext都将返回false。。。mCursor永远不应该为空,所以使用类似于ifmCursor的smth。moveToFirst{do{/*String res…你的东西*/}whilemCursor.moveToNext;}否则{/*游标没有行不应该发生*/}或者在这种情况下,因为它应该只返回1行ifmCursor。moveToFirst{/*String res…你的东西*/}否则{/*游标没有行WTF?*/}我爱你宝贝。问题解决了!!!移除光标后。移动到第一。。。。。。哈哈,我已经读到getCount是一个昂贵的操作,所以如果你能看到的话,避免它可能是明智的。尽管我上面的评论,在查看Android源代码之后,我发现几乎所有的光标操作,包括moveToFirst、moveToNext、isBeforeFirst和isFirst,都会导致至少一个对getCount的调用。因此,即使getCount很昂贵,它也是不可避免的。此外,我还发现getCount的实现会缓存返回的值,因此至少后续调用会比较便宜。