首页 > 解决方案 > SQLite 通过 SELECT * 语句只返回第一行

问题描述

我在我的sqlite表中保存了一些记录,并且记录保存得非常好。当我尝试检索这些记录时,问题就来了。假设我的 sqlite 中有 3 条记录,所以当我检索这些记录时,它会将第一条记录返回 3 次。计数是正确的,但为什么它只返回我的第一条记录 3 次?

这就是我检索记录的方式:

public ArrayList<Cursor> getAllBookings() {
        ArrayList<Cursor> bookingsList = new ArrayList<>();
        SQLiteDatabase readableDatabase = this.getReadableDatabase();
        Cursor cursor = readableDatabase.rawQuery("SELECT * FROM " + BOOKING_TABLE, null);
        cursor.moveToFirst();
        for (int i = 0; i < cursor.getCount(); i++) {
            bookingsList.add(cursor);
            cursor.moveToNext();
        }

        return bookingsList;
    }

请注意,我已经签tableMozilla SQLiteManager并且所有记录都已成功存储。

标签: javaandroidsqlite

解决方案


问题是当您应该提取并添加每个游标行包含的值时,您正在将游标本身添加到您的预订列表中。

因此,如果您有一个类 Booking 该方法应声明为

public List<Booking> getAllBookings() {

另外我认为最好在这里有一个 do/while 循环并运行它直到返回 false 并在循环内使用或类似方法cursor.moveToNext提取所有值getString

List<Booking> bookingsList = new ArrayList<>();
//...
do {
    Booking booking = new Booking();
    booking.setSomething(cursor.getString("somethingColumn"));
    //... other columns
    bookingsList.add(booking);
} while (cursor.moveToNext());

如果您没有自定义类,则可以为每一行使用数组或列表。


推荐阅读