【问题标题】:How to check if data is already exist to check by ID如何检查数据是否已经存在以通过 ID 进行检查
【发布时间】:2019-06-08 11:53:33
【问题描述】:

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

我怎样才能做到这一点?

这是我的桌子:

  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;

【问题讨论】:

  • 如果你能告诉我们你尝试了什么会更好?
  • 我只是将数据插入到 sqlite 但我无法检查是否已经存在
  • 您是否要"检查产品是否已经添加到购物车中" 或者"在插入数据之前检查产品是否已经存在"我>?
  • @Sami 我想检查是否已添加产品
  • insert() 方法返回新插入行的行 ID,如果发生错误,则返回 -1。因此,您可以检查从insert() 方法返回的值,以了解该行是否插入。在您的代码中,您将获得 id 中的值,然后您需要对其进行检查。如果你不喜欢这种方式,你可以使用EXISTS()

标签: java android sql sqlite


【解决方案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" +")";

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

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

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

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

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

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

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

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

注意

以上假设表格是购物车

【讨论】:

  • 伟大的兄弟它的工作,但我怎样才能显示该产品已经添加到购物车按钮点击
  • @MustafaShaikh 如果返回的 id 为 -1,则它已经在购物车中。交替运行基于 "SELECT * FROM " + TABLE + " WHERE + COLUMN_NAME + "='" + name + "' 的查询,然后使用 Cursor 的 getCount() 方法检查返回的行数。如果它返回 > 0 则它已经存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2020-02-04
  • 2015-07-12
  • 1970-01-01
  • 2021-06-13
相关资源
最近更新 更多