Как проверить, если данные уже существуют, чтобы проверить по идентификатору - PullRequest
0 голосов
/ 08 июня 2019

Я занимаюсь разработкой приложения для электронной коммерции и храню данные в базе данных локально, я делаю вставку кнопкой, но мне нужно проверить, добавлен ли продукт в корзину или нет.

Как можноЯ достиг этого?

Это моя таблица:

  public static final String CREATE_TABLE =
        "CREATE TABLE " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + COLUMN_PRODUCT_ID + " TEXT,"
                + COLUMN_NAME + " TEXT,"
                + COLUMN_MAIN_IMAGE + " TEXT,"
                + COLUMN_MRP_PRICE + " INTEGER , "
                + COLUMN_DISCOUNT_PRICE + " INTEGER , "
                + COLUMN_QUANTITY + " INTEGER" +")";

Это мой запрос на вставку:

SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(OneProductModel.COLUMN_PRODUCT_ID,_id);
    values.put(OneProductModel.COLUMN_NAME,name);
    values.put(OneProductModel.COLUMN_MAIN_IMAGE,main_image);
    values.put(OneProductModel.COLUMN_MRP_PRICE,mrp_price);
    values.put(OneProductModel.COLUMN_DISCOUNT_PRICE,discounted_amount);
    values.put(OneProductModel.COLUMN_QUANTITY,quantity);
    long id = db.insert(OneProductModel.TABLE_NAME,null,values);
    db.close();
    return id;

1 Ответ

1 голос
/ 09 июня 2019

Одним из решений было бы сделать идентификатор продукта ( 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 простых способа реализовать это изменение: -

  1. удалить данные приложения, а затем снова запустить приложение.
  2. удалите приложение и перезапустите приложение.

Если вам нужно сохранить существующие данные, то вам, вероятно, лучше всего написать и подпрограмму onUpgrade , которая: -

  1. СОЗДАЕТ рабочую пустую версию таблицы с использованием новой схемы
  2. Вставляет все строки из исходной таблицы в новую таблицу.
  3. ПЕРЕИМЕНУЕТ исходную таблицу (используя ALTER TABLE)
  4. переименовывает новую таблицу в имя исходной таблицы
  5. УДАЛЯЕТ переименованный исходный стол.

В подпрограмме также должны использоваться целые числа (старая версия и новая версия), чтобы гарантировать, что подпрограмма запускается только для конкретного изменения номера версии.

С учетом всего вышеперечисленного вы можете изменить номер версии.

Примечание

Вышеприведенное предполагает, что таблица является корзиной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...