OrmLite不会带来结果"其中"用"不等于"比较器和空列值

时间:2015-08-31 18:55:24

标签: java android sql sqlite ormlite

这条线有什么问题?

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

我做了一个简单的地方,与ORMlite不相等,并且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` <> ? 

我错过了什么?

1 个答案:

答案 0 :(得分:2)

我相信这是一个Sqlite常见问题,而不是ORMLite问题。如果您直接尝试:

 select col1 as col from tablename
 union all
 select col2 from tablename
 ...

现在我们来看看查询:

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);

注意当我们说bar!=一个值时,空字段不匹配:

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

但是当我们使用Sqlite的sqlite> SELECT * FROM table1 WHERE bar != 3; 1|2 运算符时, 匹配IS NOT

null

我认为这是由Sqlite's null handling引起的,尽管我无法在其上找到具体的文档。 Sqlite's IS NOT documentation提到它有点但又没有具体提及。

啊哈。以下是对Not equal <> != operator on NULL

的参考