我正在开发一个电子商务应用程序,并将数据存储在本地数据库中,我通过按钮进行插入,但是我需要检查产品是否已经添加到购物车中。
我该如何实现?
这是我的桌子:
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;
答案 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。
要实现上述架构更改,您需要删除表并重新创建它。
如果没有任何当前数据或当前数据可能丢失,那么可以通过两种简单的方法来实现更改:-
如果必须保留现有数据,则最好编写并 onUpgrade 例程:-
该例程还应使用整数(旧版本和新版本)以确保该例程仅针对特定的版本号更改运行。
在实现上述所有功能之后,您可以更改版本号。
以上假设表格是购物车