1

正直なところ、この質問に適切な名前を付ける方法がわかりませんでした..

これらの列を持つ sqlite db があります。

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 に各アイテムを 1 回だけ (平均価格で) 表示し、それを選択すると、保存されている各インスタンス (履歴など) を表示できます。

私がいる場所からこれを行う最も簡単な方法は何ですか? ViewBinder上記のメソッド (またはクエリ) を使用できると仮定するとITEM and AVG(PRICE)、「履歴」機能を実現するために、適切なビューを 1 回だけ配置するために抽出するにはどうすればよいですか?

4

1 に答える 1

0

データベースの作成文字列に次を追加します。

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

そうすれば、そこに必要な列名が一意になり、重複は許可されず、データベースに2回入力すると置き換えられます。あなたが持っている列の1つが一意である可能性があると思います。たとえば、item_id のように、一度に追加できるアイテムは 1 つだけです。最新のものは で表示されON CONFLICT REPLACEます。

于 2014-01-30T10:01:11.003 に答える