【问题标题】:Android SQLite Cursor not null operator strange situationAndroid SQLite Cursor not null operator 奇怪的情况
【发布时间】:2014-01-26 21:49:01
【问题描述】:

我只是在写一个代码 sn-p 但是它的行为很奇怪:

String sql = "SELECT _id,name,enabled FROM Reference";
Cursor c = mDatabase.rawQuery(sql, new String[] {});
if (c != null && c.getCount() > 0) {
    return c;
}
return null;

逐行调试这段代码,我注意到 c 不为空。并且通常代码返回null。但是游标值不合逻辑,我的意思是选择查询必须返回一些行,但它不执行任何操作。所以我改变了这样的代码:

String sql = "SELECT _id,name,enabled FROM Reference";
Cursor c = mDatabase.rawQuery(sql, new String[] {});
if (c != null) {
    return c;
}
return null;

再次跟踪这段代码,这次光标'c'不为空,但是sn-p返回空! 将整个 sn-p 更改为此,已解决的问题:

String sql = "SELECT _id,name,enabled FROM Reference";
Cursor c = mDatabase.rawQuery(sql, new String[] {});
if (c == null || c.getCount()<=0) {
    return null;
}
return c;

在这种情况下,查询返回合理数量的行。我只是想知道第一个代码 sn-p 有什么问题!是关于使用 != null 还是其他东西?
请注意,在第一种情况下,游标计数不合理,与数据库选择结果不匹配。

【问题讨论】:

    标签: android sqlite null operators


    【解决方案1】:

    调试器在退出框架时跳转到方法的最后一行是正常的。所以看起来最后一行被执行了,而实际上它是另一个 return 实际发生。如果不确定,请检查调用者级别的返回值。

    另一件事是rawQuery() 永远不会为Cursor 返回null

    【讨论】:

    • 那么为什么光标在第一个和最后一个 sn-p 中表现得很奇怪?我的意思是这两个 sn-p 中返回的行数似乎不同......因为这是一个奇怪的情况,我只是感到困惑!
    • 调试器在退出方法框架时似乎跳到了一行,从而使您感到困惑。
    【解决方案2】:

    数据库查询不会返回 null。相反,您收到的是一个空游标。这是一个完全有效的对象,就像一个空字符串,所以c == null 是假的。但它也不包含任何行,所以c.getCount() 返回 0。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多