在android中,如果我调用SQLiteDatabase方法查询,如下所示:
sqlitedb.query("mytable", null, "name = ?",
new String[] {null}, null, null, null);
预期结果是什么?
我希望有一个NullPointerException
但似乎我得到的光标似乎与我执行的最后一个非null selectionArgs查询具有相同的数据。这是预期的行为,我想我必须在调用此方法之前进行自己的空检查,而是传递“name IS NULL”以获得正确的结果?
答案 0 :(得分:1)
这与NPE @ satur9nine无关。它与SQL参数procressing有关。我已经证实你是对的。使用SQLite,如果您发出:
SELECT * FROM `mytable ` WHERE `name` = ?
在包含空name
个字段的行的表中使用null参数,您将得不到任何结果。您将不得不发出查询:
SELECT * FROM `mytable ` WHERE `name` IS NULL
这不仅仅是Android,还有JDBC。这是一个数据库问题。 SQLite,H2和MySQL都以这种方式运行。从这个伟大的SQL教程:
引用:
无法使用比较运算符测试NULL值,例如=,<或<>。
答案 1 :(得分:0)
在java中,如果我这样做:
String test1 = "";
String test2 = null;
bool result = test1.equals(test2);
结果将设置为false。不会发生NullPointerException。这可能是正在发生的事情。为了避免这种行为,您应该按照问题中的建议确保检查您的名称字符串是否为空。