如何检查数据是否已经存在,可以通过ID

时间:2019-06-08 11:53:33

标签: java android sql sqlite

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

我该如何实现?

这是我的桌子:

  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 个答案:

答案 0 :(得分:1)

一种解决方案是使用以下方法使产品ID( 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" +")";

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

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

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

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

如果必须保留现有数据,则最好编写并 onUpgrade 例程:-

  1. 使用新架构创建工作表的空版本
  2. 将原始表中的所有行插入新表中。
  3. 使用ALTER TABLE重命名原始表
  4. 将新表重命名为原始表的名称
  5. DROPs重命名的原始表。

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

在实现上述所有功能之后,您可以更改版本号。

注意

以上假设表格是购物车