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
这一行有什么问题?
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