SQLiteDatabase Order By Id跳过第一个元素

时间:2015-05-24 09:53:37

标签: android sqlite

在Android上从SQLite数据库中提取数据时遇到一个非常奇怪的问题。这是我的方法,它从表entries获取所有条目,并通过循环迭代它们,将它们放在列表视图中。

它工作正常,直到我想改变这一行 Cursor c = readableDatabase.rawQuery("select * from entries", null); 到这一个: Cursor c = readableDatabase.rawQuery("select * from entries order by ID DESC", null);

所以在改变后我没有看到第一个元素。不确定那里会发生什么。这是该方法的源代码。

EntryHelper entryHelper = new EntryHelper(this);
        SQLiteDatabase readableDatabase = entryHelper.getReadableDatabase();

        // NOTE: needs to be changed to order by ID...
        // 
        Cursor c = readableDatabase.rawQuery("select * from entries", null);
        c.moveToFirst();

        ArrayList productsList = new ArrayList();
        ProductsArrayAdapter productsArrayAdapter = new ProductsArrayAdapter(this, productsList);

        while (c.moveToNext()) {
            Integer entryIdIndex       = c.getColumnIndexOrThrow(Schema.Entry.ID);
            Integer entryBarcodeIndex =  c.getColumnIndexOrThrow(Schema.Entry.COLUMN_NAME_BARCODE);
            Integer entryQuantityIndex = c.getColumnIndexOrThrow(Schema.Entry.COLUMN_NAME_QUANTITY);

            Integer entryId      = c.getInt(entryIdIndex);
            String entryBarcode  = c.getString(entryBarcodeIndex);
            String entryQuantity = c.getString(entryQuantityIndex);

            Product lineItemProduct = new Product(entryId, entryBarcode, entryQuantity);
            productsList.add(lineItemProduct);

            Toast toast = Toast.makeText(this, lineItemProduct.toString(), Toast.LENGTH_SHORT);
            toast.show();
        }
        productsListView = (ListView) findViewById(R.id.productsList);
        productsListView.setAdapter(productsArrayAdapter);

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

这是你的问题:

    c.moveToFirst();

    // other code

    while (c.moveToNext()) {

你跳过第一个元素,moveToFirst将光标放在第一个位置,然后你的另一个位置移动到第二个位置。

删除moveToFirst()(您不检查返回类型或无论如何都要执行此操作)。或者将while循环更改为do while,但这假设您始终至少有1个结果。我建议删除c.moveToFirst