我只是在编写代码片段,但它的行为很奇怪:
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。通常代码返回null。但是游标值不合逻辑,我的意思是选择查询必须返回一些行,但它不会做任何事情。所以我改变了这样的代码:
String sql = "SELECT _id,name,enabled FROM Reference";
Cursor c = mDatabase.rawQuery(sql, new String[] {});
if (c != null) {
return c;
}
return null;
再次跟踪此代码,此时光标'c'不为null,但片段返回null! 将整个片段更改为此问题,修复了问题:
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;
在这种情况下,查询返回合理的行数。我只是想知道第一个代码片段有什么问题!是关于使用!= null 还是其他东西?
请注意,在第一种情况下,光标计数不合理且与数据库选择结果不匹配。
答案 0 :(得分:2)
调试器在退出帧时跳转到方法的最后一行是正常的。所以似乎最后一行被执行了,而实际上它是另一个return
实际发生的。如果您不确定,请检查来电者级别的返回值。
另一件事是rawQuery()
永远不会为null
返回Cursor
。
答案 1 :(得分:1)
数据库查询不会返回null。相反,你正在接收一个空光标。这是一个完全有效的对象,就像一个空字符串,所以c == null
是假的。但它也不包含任何行,因此c.getCount()
返回0。