Мне нужно решить эту проблему.
Я начал свой проект с неверной концепции, что ON CONFLICT REPLACE будет обновлять содержимое строки, когда обнаружит конфликт.Также я думал, что в этой вставке (с конфликтом), если я не укажу значение для столбца, он не будет заменять, а сохранит старое значение.Вместо этого я просто обнаружил, что ON CONFLICT REPLACE, если он обнаружит конфликт, он сделает delete-> insert, и если он не может найти значение для столбца (где я поставил ноль, чтобы не обновлять поле), он заменит нульзначение со значением столбца по умолчанию для успешного выполнения вставки.
Итак, знайте, у меня есть проблема с большими корнями: D
Как вы понимаете, я хочу достичь этого:
Я всегда делаю вставку, если он находит строку с такими же уникальными ключами (конфликт), он только обновляет значения.Если для поля он не найдет значения (я не помещаю его в ContentValues), он не будет обновлять это поле, а сохранит старое (как обычный запрос на обновление, где вы не ставите столбец для его обновления).
Чтобы решить мою проблему, я попытался найти следующие решения:
- ON CONFLICT UPDATE (это будет работать, только если у вас есть только 1 уникальное поле, если у вас есть 2 или более уникальных поля, которые выбрасываютконфликт это приведет к сбою)
- ОБНОВЛЕНИЕ НА ВСТАВКЕ ОТКАЗА, где он всегда пытается сделать обновление.Если происходит сбой, потому что он не может найти строку, относящуюся к записи (она еще не присутствует в БД), он попытается выполнить вставку
Кто-то уже думал об этой проблеме и имеетрешение?Или, может быть, мы можем просто попытаться найти решение:)
Я думаю, что лучший способ - это поддерживать низкий уровень (уровень БД), чтобы поддерживать хороший уровень производительности.