java - 如何检查数据是否已经存在以通过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;
解决方案
一种解决方案是使用以下方法使产品 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约束。但是,由于SQLiteDatabase的insert方法有效地使用INSERT OR IGNORE约束错误被忽略为错误,因此不会插入行并且将返回 -1 并将id设置为 -1。
要实现上述架构更改,您需要 DROP 表并重新创建它。
如果没有任何当前数据或当前数据可能会丢失,那么有两种简单的方法可以实现更改:-
- 删除应用程序的数据,然后重新运行应用程序。
- 卸载应用程序并重新运行应用程序。
如果您必须保留现有数据,那么您可能最好编写和onUpgrade例程:-
- 使用新模式创建表的工作空版本
- 将原始表中的所有行插入到新表中。
- 重命名原始表(使用 ALTER TABLE)
- 将新表重命名为原始表的名称
- 删除重命名的原始表。
例程还应利用整数(旧版本和新版本)来确保例程仅针对特定版本号更改运行。
实现上述所有内容后,您可以更改版本号。
笔记
以上假设桌子是购物车
推荐阅读
- c# - 如何检测图像内容的结束位置?
- python - Gurobi:添加具有下限和上限的约束
- python-3.x - ValueError:无法为具有形状“(?,4)”的张量“Placeholder_36:0”提供形状(4,)的值
- python - Python 3:检查命令是否在“if .. else”块中无异常运行,而不使用“try .. except”
- javascript - 使用外部 Javascript 文件在 html 中制作按钮执行事件
- c# - 让页面(已经由母版制作)在其中动态加载内容的推荐策略?
- scala - 为什么顺序在事件中很重要?Coursera-Scala
- xslt - XSL 字体大小计算
- string - 我需要从 URL 路径中提取特定字符串
- pandas - 如何根据一列中的唯一值将 df 拆分为更小的 df,然后将每个 df 旋转到另一列