首页 > 解决方案 > 如何检查数据是否已经存在以通过ID检查

问题描述

我正在开发一个电子商务应用程序并将数据存储在本地数据库中,我使用一个按钮进行插入,但我需要检查产品是否已添加到购物车中。

我怎样才能做到这一点?

这是我的桌子:

  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;

标签: javaandroidsqlsqlite

解决方案


一种解决方案是使用以下方法使产品 ID ( COLUMN_PRODUCT_ID )唯一:-

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" +")";

因此,如果尝试使用已存在的产品 ID插入产品,则会出现UNIQUE约束。但是,由于SQLiteDatabaseinsert方法有效地使用INSERT OR IGNORE约束错误被忽略为错误,因此不会插入行并且将返回 -1 并将id设置为 -1。

要实现上述架构更改,您需要 DROP 表并重新创建它。

如果没有任何当前数据或当前数据可能会丢失,那么有两种简单的方法可以实现更改:-

  1. 删除应用程序的数据,然后重新运行应用程序。
  2. 卸载应用程序并重新运行应用程序。

如果您必须保留现有数据,那么您可能最好编写和onUpgrade例程:-

  1. 使用新模式创建表的工作空版本
  2. 将原始表中的所有行插入到新表中。
  3. 重命名原始表(使用 ALTER TABLE)
  4. 将新表重命名为原始表的名称
  5. 删除重命名的原始表。

例程还应利用整数(旧版本和新版本)来确保例程仅针对特定版本号更改运行。

实现上述所有内容后,您可以更改版本号。

笔记

以上假设桌子是购物车


推荐阅读