Вы можете попробовать некоторые вещи, которые он предлагает. Я бы снова начал синхронизацию Gradle: в Android Studio выполните File -> Sync Project with Gradle Files
. Это обеспечит загрузку всех зависимостей.
Смежный вопрос: получить нулевой == нулевой в SQL. Но этот ответ требует, чтобы поисковое значение было написано 2 раза (то есть: 2 знака вопроса в моем PreparedStatement)!?
Ответы второго ранга и последующие дают метод, который делает это без привязки поискового значения дважды:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Обратите внимание, что для этого требуется фиктивное значение, которое никогда не может быть допустимым значением столбца (это «вне диапазона»); Я использую пустую строку. Если у вас нет такого значения, вам придется смириться с привязкой значения дважды:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);
В SQL NULL не равен самому себе. Таким образом, вы можете:
1 - заменить его фиктивным значением и сравнить его, как в:
SELECT * FROM ROUTERS WHERE ISNULL(ROUTER_ADDRESS,'xxx') <=> ISNULL(?,'xxx')
или
2 - заменить его более сложным логическим тестом, как в:
SELECT *
FROM ROUTERS
WHERE (
(ROUTER_ADDRESS IS NULL AND ? IS NOT NULL)
OR
(ROUTER_ADDRESS IS NOT NULL AND ? IS NULL)
OR
(ROUTER_ADDRESS IS NOT NULL AND ? IS NOT NULL AND ROUTER_ADDRESS <> ?
)
If you want ROUTERS where ROUTER_ADDRESS is null when ? is null then possibly this could work:
SELECT *
FROM ROUTERS
WHERE ROUTER_ADDRESS = (case when ROUTER_ADDRESS is null and ? is null then null
else ? end)
Стандартные NULL-безопасные операторы равенства в SQL: ОТЛИЧИТСЯ ОТ
и НЕ ОТЛИЧИТСЯ ОТ
.