在 android 中,如果我像下面这样调用 SQLiteDatabase 方法查询:
sqlitedb.query("mytable", null, "name = ?",
new String[] {null}, null, null, null);
预期的结果是什么?
我希望出现 NullPointerException
但似乎我得到了一个游标,它似乎具有与我执行的最后一个非空 selectionArgs 查询相同的数据。这是预期的行为吗,我想我必须在调用此方法之前进行自己的空值检查,而不是传递“name IS NULL”以获得正确的结果?
最佳答案
这与 NPE @satur9nine 无关。它与 SQL 参数处理有关。我已经确认你是正确的。使用 SQLite,如果你发出:
SELECT * FROM `mytable ` WHERE `name` = ?
如果表中的行具有空 name
字段,则使用空参数,您将得不到任何结果。您将不得不发出查询:
SELECT * FROM `mytable ` WHERE `name` IS NULL
这不仅仅是Android,还有JDBC。这是一个数据库问题。 SQLite、H2 和 MySQL 都以这种方式运行。来自这个很棒的 SQL 教程:
引用:
It is not possible to test for NULL values with comparison operators, such as =, <, or <>.
关于java - Android SQLite 查询在选择器中有问号,在 selectionArgs 中有空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7863056/