2015-08-31 4 views
2

Что не так с этой линией?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` <> ? 

я» m что-то не хватает?

ответ

2

Я считаю, что это вопрос Sqlite, а не проблема 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| 

Уведомление что, когда мы говорим, бар = значение, нулевое поле не соответствует:

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

Однако когда мы используем IS NOT оператор SQLITE, он делает Матч null:

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

Я считаю, что это связано с Sqlite's null handling, хотя я не могу найти конкретные документы на него. Sqlite's IS NOT documentation упоминает это несколько, но опять же не конкретно.

Aha. Вот ссылка на: Not equal <> != operator on NULL

+0

Хорошо, хороший пример, имеет немного логики, должен быть более явным, что компараторы ... Хорошо, что же эквивалентно в ORMLite для "is not"? Я смотрю только 3 варианта: .isNull (поле), .isNotNull (поле) и .not (где) --- Я полагаю, это .not (где), как я могу его реализовать? –

+1

Ну, вы можете сделать запрос 'и (...)' с помощью 'isNotNull (...)'. Другим решением является использование 'rawComparison (...)'. – Gray

+0

да, я сделал это вчера, работает :) спасибо –