Одним из решений было бы сделать идентификатор продукта ( COLUMN_PRODUCT_ID ) UNIQUE , используя: -
public static final String CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COLUMN_PRODUCT_ID + " TEXT UNIQUE,"
+ COLUMN_NAME + " TEXT,"
+ COLUMN_MAIN_IMAGE + " TEXT,"
+ COLUMN_MRP_PRICE + " INTEGER , "
+ COLUMN_DISCOUNT_PRICE + " INTEGER , "
+ COLUMN_QUANTITY + " INTEGER" +")";
Таким образом, если попытка ВСТАВИТЬ продукт с идентификатором продукта, который уже существует, тогда возникнет ограничение UNIQUE . Однако, поскольку метод SQLiteDatabase insert эффективно использует INSERT OR IGNORE ошибка ограничения игнорируется как ошибка, строка не вставляется, и -1 будет возвращается id в -1.
Чтобы реализовать вышеуказанное изменение схемы, вам нужно удалить таблицу и создать ее заново.
Если текущие данные отсутствуют или текущие данные могут быть потеряны, то есть 2 простых способа реализовать это изменение: -
- удалить данные приложения, а затем снова запустить приложение.
- удалите приложение и перезапустите приложение.
Если вам нужно сохранить существующие данные, то вам, вероятно, лучше всего написать и подпрограмму onUpgrade , которая: -
- СОЗДАЕТ рабочую пустую версию таблицы с использованием новой схемы
- Вставляет все строки из исходной таблицы в новую таблицу.
- ПЕРЕИМЕНУЕТ исходную таблицу (используя ALTER TABLE)
- переименовывает новую таблицу в имя исходной таблицы
- УДАЛЯЕТ переименованный исходный стол.
В подпрограмме также должны использоваться целые числа (старая версия и новая версия), чтобы гарантировать, что подпрограмма запускается только для конкретного изменения номера версии.
С учетом всего вышеперечисленного вы можете изменить номер версии.
Примечание
Вышеприведенное предполагает, что таблица является корзиной