【问题标题】:How to differentiate between same Id values in SQLite Android如何区分 SQLite Android 中的相同 Id 值
【发布时间】:2019-02-13 04:51:41
【问题描述】:

我遇到的问题是我认为的架构。我需要知道如何区分关于颜色的相同值。例如,我有一件不同颜色和尺寸的商品。如果用户选择了相同的数据(颜色和尺寸),并且如果用户选择了具有不同数据(颜色和尺寸)的相同项目,那么什么模式可以帮助我覆盖?我正在提供我的数据库类和两个屏幕截图。

public class Database extends SQLiteAssetHelper {

// Database Name
private static final String DB_NAME = "AVHDB.db";

// Database Version
private static final int DB_VERSION = 1;

// Parameterized Constructor
public Database(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

// Function for getting all items in a Cart
public List<Order> getCarts(String uId) {
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = { "UserId", "ItemId", "ItemName", "ItemImage", "ItemPrice", "ItemStock", "ItemMaterial", "ItemBrand", "ItemCondition", "ItemStyle", "ItemColorValue", "ItemColorName", "ItemSize", "ItemQuantity" };
    String sqlTable = "OrderDetail";

    qb.setTables(sqlTable);
    Cursor cursor = qb.query(db, sqlSelect, "UserId=?", new String[] {uId}, null, null, null);

    final List<Order> result = new ArrayList<>();
    if (cursor.moveToFirst()) {
        do {
            result.add(new Order(
                    cursor.getString(cursor.getColumnIndex("UserId")),
                    cursor.getString(cursor.getColumnIndex("ItemId")),
                    cursor.getString(cursor.getColumnIndex("ItemName")),
                    cursor.getString(cursor.getColumnIndex("ItemImage")),
                    cursor.getString(cursor.getColumnIndex("ItemPrice")),
                    cursor.getString(cursor.getColumnIndex("ItemStock")),
                    cursor.getString(cursor.getColumnIndex("ItemMaterial")),
                    cursor.getString(cursor.getColumnIndex("ItemBrand")),
                    cursor.getString(cursor.getColumnIndex("ItemCondition")),
                    cursor.getString(cursor.getColumnIndex("ItemStyle")),
                    cursor.getString(cursor.getColumnIndex("ItemColorValue")),
                    cursor.getString(cursor.getColumnIndex("ItemColorName")),
                    cursor.getString(cursor.getColumnIndex("ItemSize")),
                    cursor.getString(cursor.getColumnIndex("ItemQuantity"))
                    ));
        } while (cursor.moveToNext());

    }
    return result;
}

// Function for checking if items exists in Cart
public boolean checkItemExists(String itemId, String uId) {
    boolean flag;
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor;
    String SQLQuery = String.format("SELECT * FROM OrderDetail WHERE UserId='%s' AND ItemId='%s'", uId, itemId);
    cursor = db.rawQuery(SQLQuery, null);
    flag = cursor.getCount() > 0;
    cursor.close();
    return flag;
}

// Function for adding items to Cart
public void addToCart(Order order) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format(
            "INSERT OR REPLACE INTO OrderDetail(UserId, ItemId, ItemName, ItemImage, ItemPrice, ItemStock, ItemMaterial, ItemBrand, ItemCondition, ItemStyle, ItemColorValue, ItemColorName, ItemSize, ItemQuantity) " +
            "VALUES('%s', '%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');",
            order.getUserId(),
            order.getItemId(),
            order.getItemName(),
            order.getItemImage(),
            order.getItemPrice(),
            order.getItemStock(),
            order.getItemMaterial(),
            order.getItemBrand(),
            order.getItemCondition(),
            order.getItemStyle(),
            order.getItemColorValue(),
            order.getItemColorName(),
            order.getItemSize(),
            order.getItemQuantity());
    db.execSQL(query);
}

// Function for cleaning Cart
public void cleanCart() {
    SQLiteDatabase db = getReadableDatabase();
    String query = "DELETE FROM OrderDetail";
    db.execSQL(query);
}

// Function for getting the count of items in a Cart
public int getCountCart(String uId) {
    int count = 0;
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("SELECT COUNT(*) FROM OrderDetail WHERE UserId='%s'", uId);
    Cursor cursor = db.rawQuery(query, null);
    try {
        if (cursor.moveToFirst()) {
            do {
                count = cursor.getInt(0);
            } while (cursor.moveToNext());
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return count;
}

// Function for updating Cart
public void updateCart(Order order) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("UPDATE OrderDetail SET ItemQuantity= '%s' WHERE UserId = '%s' AND ItemId='%s'", order.getItemQuantity(), order.getUserId(), order.getItemId());
    db.execSQL(query);
}

// Function for increasing Cart
public void increaseCart(String uId, String itemId) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("UPDATE OrderDetail SET ItemQuantity= ItemQuantity+1 WHERE UserId = '%s' AND ItemId='%s'", uId, itemId);
    db.execSQL(query);
}

// Function for removing items from the cart
public void removeFromCart(String itemId, String uId) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM OrderDetail WHERE UserId='%s' and ItemId='%s'", uId, itemId);
    db.execSQL(query);
}

// Function for adding items to Favorites
public void addToFavorites(Favourites item) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("INSERT INTO Favourites(UserId, ItemId, ItemName, ItemPrice, ItemImage, ItemCondition, ItemStyle) " +
                    "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s');",
            item.getUserId(),
            item.getItemId(),
            item.getItemName(),
            item.getItemPrice(),
            item.getItemImage(),
            item.getItemCondition(),
            item.getItemStyle());
    db.execSQL(query);
}

// Function for removing items to Favorites
public void removeFromFavorites(String uId, String itemId) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM Favourites WHERE UserId='%s' and ItemId='%s';", uId, itemId);
    db.execSQL(query);
}

// Function to know if item is already Favourite
public boolean isFavorite(String uId, String itemId) {
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("SELECT * FROM Favourites WHERE UserId='%s'and ItemId='%s';", uId, itemId);
    Cursor cursor = db.rawQuery(query, null);
    if (cursor.getCount() <= 0) {
        cursor.close();
        return false;
    }
    cursor.close();
    return true;
}

// Function for getting all items in Favorites
public List<Favourites> getAllFavorites(String uID) {

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = {"UserId", "ItemId", "ItemName", "ItemPrice", "ItemImage", "ItemCondition", "ItemStyle"};
    String sqlTable = "Favourites";

    qb.setTables(sqlTable);
    Cursor cursor = qb.query(db, sqlSelect, "UserId=?", new String[] {uID}, null, null, null);

    final List<Favourites> result = new ArrayList<>();

    if (cursor.moveToFirst()) {
        do {
            result.add(
                    new Favourites(
                            cursor.getString(cursor.getColumnIndex("UserId")),
                            cursor.getString(cursor.getColumnIndex("ItemId")),
                            cursor.getString(cursor.getColumnIndex("ItemName")),
                            cursor.getString(cursor.getColumnIndex("ItemPrice")),
                            cursor.getString(cursor.getColumnIndex("ItemImage")),
                            cursor.getString(cursor.getColumnIndex("ItemCondition")),
                            cursor.getString(cursor.getColumnIndex("ItemStyle"))));
        } while (cursor.moveToNext());
    }
    return result;
}

用户将商品添加到购物车的位置。 Item Detail Screen

Cart

购物车中的以下值是要设置的默认值,因此请忽略它们:)

【问题讨论】:

  • 嘿,快把最后一个分号放在你的代码里。
  • 从逻辑上讲,你应该增加(更新)一个Item的数量,如果它有相同的数据,如果它有不同的数据,你应该将它添加为具有不同ID的新Item
  • @Ineedajob 将最后一个分号放在代码中是什么意思?
  • 只是告诉您代码中的一个分号已用完。你也可以清楚地看到它。只需编辑您的帖子
  • 感谢您通知@Ineedajob :)

标签: android sqlite android-sqlite sqliteopenhelper


【解决方案1】:

在 checkItemExists 中检查 ColorName、ColorValue 和 Size 解决了这个问题。更改这行代码。

public boolean checkItemExists(String itemId, String uId, String mItemColorName, String mItemColorValue, String mItemSize) {
    boolean flag;
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor;
    String SQLQuery = String.format("SELECT * FROM OrderDetail WHERE UserId='%s' AND ItemId='%s' AND ItemColorName='%s' AND ItemColorValue='%s' AND ItemSize='%s'", uId, itemId, mItemColorName, mItemColorValue, mItemSize);
    cursor = db.rawQuery(SQLQuery, null);
    flag = cursor.getCount() > 0;
    cursor.close();
    return flag;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 2023-03-16
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多