Как я могу видеть только элементы из таблицы базы данных, которые имеют определенный идентификатор? - PullRequest
0 голосов
/ 01 мая 2011

В моей базе данных у меня есть 2 таблицы. Для таблицы я хочу отображать только те элементы, которые имеют определенный идентификатор во втором столбце. У меня есть адаптер для всех предметов из таблицы, но я не знаю, как он должен выглядеть для просмотра только тех предметов, которые мне нужны. Любая идея приветствуется.

Вот мой адаптер:

private void populate(){
        c=prod.fetchAll();
        startManagingCursor(c);

        adapter=new SimpleCursorAdapter(this,R.layout.listproduct,c,
                new String[] {ProductDbAdapter.KEY_ITEM,ProductDbAdapter.KEY_QUANTITY,ProductDbAdapter.KEY_UNITS},
                new int[] {R.id.prod1,R.id.prod2,R.id.prod3});

       lv.setAdapter(adapter);

    }

Код для ProductDbAdapter:

public class ProductDbAdapter extends AbstractDbAdapter {

    public static final String KEY_LISTID = "list_id";
    public static final String KEY_ITEM = "item";
    public static final String KEY_QUANTITY="quantity";
    public static final String KEY_UNITS="units";

    public static final String KEY_ROWID = "_id";

    private static final String DATABASE_TABLE = "products";


    public ProductDbAdapter(Context ctx) {
        super(ctx);
    }


    public long create(Integer listid, String item,String quantity,String units) {
        ContentValues args = new ContentValues();
        args.put(KEY_LISTID,listid);
        args.put(KEY_ITEM,item);
        args.put(KEY_QUANTITY,quantity);
        args.put(KEY_UNITS,units);

        return mDb.insert(DATABASE_TABLE, null,args);
    }


    public boolean updateproduct(long rowId,Integer listid, String item,String quantity,String units) {
        ContentValues values = new ContentValues();
        values.put(KEY_LISTID, listid);
        values.put(KEY_ITEM, item);
        values.put(KEY_QUANTITY, quantity);
        values.put(KEY_UNITS,units);
        return mDb.update(DATABASE_TABLE, values, KEY_ROWID + "="+ rowId, null) > 0;
    }

    public boolean delete(long rowId) {
        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }


    public Cursor fetchAll() {
        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LISTID,KEY_ITEM,KEY_QUANTITY,
                KEY_UNITS}, null, null, null, null, null);
    }


    public Cursor fetch(long rowId) throws SQLException {
        Cursor mCursor =
            mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_LISTID,KEY_ITEM,KEY_QUANTITY, KEY_UNITS}, KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }
}

Я пытаюсь отобразить только элементы с определенным идентификатором list_id.

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Почему вы запрашиваете курсор, который возвращает все элементы, когда вам нужны элементы только с определенным идентификатором?Измените запрос к базе данных, чтобы получить элементы только с теми идентификаторами, которые вы определили в выражении where вашего запроса к базе данных.

Позвольте базе данных выполнять фильтрацию нужных вам элементов, а не работу адаптера.

0 голосов
/ 01 мая 2011

В ProductDbAdapter, попробуйте что-то вроде ...

public Cursor fetchListId(long listId) throws SQLException {
    Cursor mCursor =
        mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                KEY_LISTID,KEY_ITEM,KEY_QUANTITY, KEY_UNITS}, 
                KEY_LISTID+ "=" + listId, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
...