java - Android SQLite 查询在选择器中有问号,在 selectionArgs 中有空

标签 java android sqlite

在 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 教程:

http://www.w3schools.com/sql/sql_null_values.asp

引用:

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/

相关文章:

java - 在 Hibernate Java 中获取两个日期之间的用户数据

java - 在实时数据流中找到前 k 个频繁词

java - 如何使用 SecureRandom 生成随机数

sqlite - Py2app 不包含 Sqlite 驱动程序 - "Database error: Driver not loaded Driver not loaded"

Java 内存错误 : unable to create new native thread

android - 关于 Android 应用程序中的多任务处理

android - 如何使用对齐方式管理 ImageView 和 TextView ?

java - Android给ImageView添加边框图片

mysql - 类似于 instagram 的 iOS 应用程序的数据库存储

sql - 只选择SQL中一列中重复值的第一行