如何对存储在sqlite数据库中的所有数据进行迭代和检索



从sqlite数据库检索数据时遇到问题,我需要的是在控制台上检索所有数据。但我在控制台上只得到一行数据以下是从Sqlite插入和检索数据的代码。请说明我遗漏了什么或做错了什么。谢谢你的帮助。

 public long InsertContacts(Contacts contacts) {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(KEY_IMAGE, DbUtility.getBytes(contacts.getBmp()));
            contentValues.put(KEY_BABY_NAME, contacts.getBaby_name());
            contentValues.put(KEY_GENDER, contacts.getBaby_gender());
            contentValues.put(KEY_SET_DATE, contacts.getDate());
            contentValues.put(KEY_SET_TIME, contacts.getTime());

            return db.insert(TABLE_NAME, null, contentValues);

        }
        public Contacts retriveContactsDetails() {
            SQLiteDatabase db = this.getReadableDatabase();
            String[] columns = new String[]{KEY_IMAGE, KEY_BABY_NAME, KEY_GENDER, KEY_SET_DATE, KEY_SET_TIME};
            Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null);
           cursor.moveToFirst();
                while (cursor.isAfterLast() == false) {
                    byte[] blob = cursor.getBlob(cursor.getColumnIndex(KEY_IMAGE));
                    String name = cursor.getString(cursor.getColumnIndex(KEY_BABY_NAME));
                    String gender = cursor.getString(cursor.getColumnIndex(KEY_GENDER));
                    String date = cursor.getString(cursor.getColumnIndex(KEY_SET_DATE));
                    String time = cursor.getString(cursor.getColumnIndex(KEY_SET_TIME));
                    Log.d(TAG, DbUtility.getImage(blob) + name + "-" + gender + "-" + date + "- " + time); // I need to get all date here that have been inserted but i am getting only first rows data every time i insert.
                    cursor.moveToNext();
                    return new Contacts(DbUtility.getImage(blob), name, gender, date, time);
                }
                cursor.close();
                return null;
            }
        }

联系人.java

public class Contacts {

    private Bitmap bmp;
    private String baby_name;
    private String baby_gender;
    private String date;
    private String time;
    public Contacts(Bitmap b, String n, String g, String d, String t) {
        bmp = b;
        baby_name = n;
        baby_gender = g;
        date = d;
        time = t;
    }
    public Bitmap getBmp() {
        return bmp;
    }
    public String getBaby_name() {
        return baby_name;
    }
    public String getBaby_gender() {
        return baby_gender;
    }
    public String getDate() {
        return date;
    }
    public String getTime() {
        return time;
    }
}

您应该将retriveContactsDetails()更改为:

public List<Contacts> retriveContactsDetails() {
    SQLiteDatabase db = this.getReadableDatabase();
    String[] columns = new String[]{KEY_IMAGE, KEY_BABY_NAME, KEY_GENDER, KEY_SET_DATE, KEY_SET_TIME};
    List<Contacts> contactsList = new ArrayList<>();
    Cursor cursor;
    try {
        cursor = db.query(TABLE_NAME, columns, null, null, null, null, null);
        while(cursor.moveToNext()) {
            byte[] blob = cursor.getBlob(cursor.getColumnIndex(KEY_IMAGE));
            String name = cursor.getString(cursor.getColumnIndex(KEY_BABY_NAME));
            String gender = cursor.getString(cursor.getColumnIndex(KEY_GENDER));
            String date = cursor.getString(cursor.getColumnIndex(KEY_SET_DATE));
            String time = cursor.getString(cursor.getColumnIndex(KEY_SET_TIME));
            contactsList.add(new Contacts(DbUtility.getImage(blob), name, gender, date, time));
            Log.d(TAG, DbUtility.getImage(blob) + name + "-" + gender + "-" + date + "- " + time);
        }
    } catch (Exception ex) {
        // Handle exception
    } finally {
        if(cursor != null) cursor.close();
    }
    return contactsList;
}

另外,Contacts类应该命名为Contact,因为它只包含对象的一个实例。

    public Contacts retriveContactsDetails() {
            ...
            while (cursor.isAfterLast() == false) {
                ...
                cursor.moveToNext();
                return new Contacts(...);
            }

您的Contacts类名称错误,因为它只包含一个联系人。它应该命名为Contact

return语句执行它所说的,它从函数返回。因此循环体不能执行多次。

您实际想要做的是构建一个联系人列表,在每个循环迭代中向该列表添加一个联系人对象,并在最后返回该列表。

最新更新