android – 一个空的SQLite游标是否会为isBeforeFirst,isAfterLast,两者或两者都返回true?

android – 一个空的SQLite游标是否会为isBeforeFirst,isAfterLast,两者或两者都返回true?,第1张

概述这是一个非常直截了当的问题.我希望答案是“两个”,但我担心它们都不是.我已经仔细检查了 SQLiteDatabase和 Cursor的Android开发人员文档,但找不到这个问题的任何明确答案. 我要问的情况是我得到一个游标,调用moveToFirst,然后循环直到isAfterLast返回true.对于我正在编码几次的模式来说非常方便,如果光标有0条记录就可以正常工作并执行循环0次. 或者我是否 这是一个非常直截了当的问题.我希望答案是“两个”,但我担心它们都不是.我已经仔细检查了 SQLiteDatabase和 Cursor的AndroID开发人员文档,但找不到这个问题的任何明确答案.

我要问的情况是我得到一个游标,调用movetoFirst,然后循环直到isAfterLast返回true.对于我正在编码几次的模式来说非常方便,如果光标有0条记录就可以正常工作并执行循环0次.

或者我是否需要先显式测试空光标?

编辑:一些回复表明人们并没有得到我所要求的.基本上,我想写这个:

cursor = myDb.query(...)cursor.movetoFirst()while (!cursor.isAfterLast()) {    processRow(...)}

但我并不是100%肯定我能. isAfterLast不能返回任何有用的但是对于这种情况是真的,但这并不意味着它实际上对于空查询返回true.文档似乎没有指定大多数游标方法的返回值,如果游标为空(AndroID文档在很多极端情况下似乎是非特定的,实际上),而不是getCount.所以我担心我需要这样做:

cursor = myDb.query(...)if (cusror.getCount() > 0) {    cursor.movetoFirst()    while (!cursor.isAfterLast()) {        processRow(...)    }}

这更加混乱,逻辑冗余.请记住,在实际实现中有更多的代码,这是跨多种方法的.其中一个答案现在建议我也需要检查游标是否为空,这完全没有文档…

我只是想知道在空光标上调用时是否有其他人知道isAfterLast的实际行为.

解决方法 我不使用isAfterLast.我使用以下模式来读取查询结果.
sqliteDatabase db = new DbHelper().getWritableDatabase();    String sql = "SELECT ...";    String[] args = ...;    Cursor cs = db.rawquery(sql,args);    while (cs.movetoNext()) {        // cs.getXxx(0),cs.getXxx(1)    }    cs.close();    db.close();

DbHelper是我从sqliteOpenHelper扩展的类

总结

以上是内存溢出为你收集整理的android – 一个空的SQLite游标是否会为isBeforeFirst,isAfterLast,两者或两者都返回true?全部内容,希望文章能够帮你解决android – 一个空的SQLite游标是否会为isBeforeFirst,isAfterLast,两者或两者都返回true?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1130391.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存