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

时间:2016-05-19 06:40:56

标签: android sqlite cursor

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

print "".join([str(i) for i in range(1,int(raw_input())+1)])

Contacts.java

print(*range(1,int(raw_input())+1),sep='')

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

您应该将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,因为它只包含您对象的单个实例。