OrmLite 不会在 "where" 上使用 "not equals" 比较器和空列值带来结果

OrmLite does not bring results on "where" with "not equals" comparator and null column values

这一行有什么问题?

qB.where().ne(AppConstant.SYNC_STATUS_FIELD_NAME, strSyncOK);

我正在用 ORMlite 做一个简单的 where not equals 并带来 0 个结果没有错误:

完整代码:

dao = DaoManager.createDao(connectionSource, clazz);
QueryBuilder qB = dao.queryBuilder();
SelectArg strSyncOK = new SelectArg(AppConstant.SYNC_OK); // ==> "OK" string
qB.where().ne(AppConstant.SYNC_STATUS_FIELD_NAME, strSyncOK);
List<T> var = dao.query(qB.prepare());

当我删除行时

qB.where().ne(AppConstant.SYNC_STATUS_FIELD_NAME, strSyncOK);

一切正常

当线在那里时,没有找到结果,我检查了数据,所有带AppConstant.SYNC_STATUS_FIELD_NAME的数据都是空的

参数:

public static final String SYNC_OK = "OK";

输出:

SELECT * FROM `Evento` WHERE `syncStatus` <> ? 

我错过了什么?

我认为这是一个 Sqlite FAQ 而不是 ORMLite 问题。如果你直接尝试:

sqlite> CREATE TABLE table1 (foo int, bar string);
sqlite> INSERT INTO table1 (foo, bar) VALUES (1, 2);
sqlite> INSERT INTO table1 (foo, bar) VALUES (2, null);

现在我们来看查询:

sqlite> SELECT * FROM table1 WHERE foo == 1;
1|2
sqlite> SELECT * FROM table1 WHERE foo == 2;
2|

注意 当我们说 bar != a value 时,空字段不匹配:

sqlite> SELECT * FROM table1 WHERE bar != 3;
1|2

然而当我们使用Sqlite的IS NOT运算符时,它匹配null:

sqlite> SELECT * FROM table1 WHERE bar is not 3;
1|2
2|    <---- here it is!!

我认为这是由于 Sqlite's null handling although I can't find the specific docs on it. Sqlite's IS NOT documentation 稍微提到了它,但同样没有具体提及。

啊哈。以下是参考阅读:Not equal <> != operator on NULL