1

老实说,我不知道如何正确命名这个问题..

我有一个包含这些列的 sqlite 数据库。

private final String createDb = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( "
        + C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + DATE + " text, "
        + SUBCAT + " text, "
        + ITEM + " text, "
        + PRICE + " integer, "
        + QUANTITY + " integer, "
        + WEIGHT + " integer, "
        + VOLUME + " integer, "
        + SALE + " text, "
        + STORE + " text, "
        + EXTRA + " text) ";

并试图ViewBinder用来调用如下所示的 SQL 查询。

public String avgPrice() {
        ourHelper = new DbHelper(ourContext);
        db = ourHelper.getReadableDatabase(); 
        String sql = "SELECT AVG(PRICE) as avgprice, ITEM FROM " + TABLE_NAME + " GROUP BY " + ITEM;
        Cursor d = db.rawQuery(sql, null);

我最初有一个带有 XML 的 ListView,其中包含每个列的文本视图。这只是将每列以 1:1 的比例从数据库中拉出。使用适配器很容易。我正在尝试使用ViewBinder来检测每个输入项目的平均价格(如果有重复的实例,例如不同的日期)并显示该项目。

本质上,我希望 ListView 仅显示每个项目一次(平均价格),当您选择它时,您可以查看每个存储的实例(如历史记录)。

从我所在的地方执行此操作的最简单方法是什么?假设ViewBinder可以使用上面的方法(或查询),我如何提取ITEM and AVG(PRICE)只放入适当的视图一次以实现我的“历史”功能?

4

1 回答 1

0

将以下内容添加到数据库的创建字符串中:

+ "UNIQUE(" + COLUMN_NAME + ") ON CONFLICT REPLACE);";

这样,您将拥有任何您想要的唯一列名,不允许重复,如果两次输入数据库,将被替换。我假设您拥有的列之一可以是唯一的。例如,像 item_id 一样,因此一次只能添加该项目中的一个,它将显示最新的ON CONFLICT REPLACE.

于 2014-01-30T10:01:11.003 回答