在SQLite查询后如何处理Cursor?

时间:2011-07-21 20:42:53

标签: android database sqlite cursor

这是我第一次使用数据库,我不确定这是如何工作的。我创建了数据库并做了一个返回游标的查询...现在是什么?什么是光标,真的吗?我可以使用它来浏览我的数据,或者我必须将它放在ArrayList或ListActivity中还是什么?

6 个答案:

答案 0 :(得分:6)

您需要迭代光标才能获得结果。

使用cursor.moveToFirst()和/或cursor.moveToNext()(使用while循环)。然后,您可以使用getX()方法,例如cursor.getInt()cursor.getString()

例如,您希望查询得到一个结果:

if (cursor.moveToFirst()) {
    String name = cursor.getString(cursor.getColumnIndex('NAME'));
    int age = cursor.getInt(cursor.getColumnIndex('AGE'));
} else {
    // oops nothing found!
}

答案 1 :(得分:2)

首先调用cursor.moveToFirst()。每次调用cursor.moveToNext()时,它都会移动到下一行。确保在完成光标操作后调用cursor.deactivate(),否则您将在日志中遇到错误。

答案 2 :(得分:1)

迭代返回的Cursor实例

public List<Object[]> cursorToTableRows(Cursor cursor) {
        List<Object[]> result = new ArrayList<Object[]>(cursor.getCount());

        cursor.move(0);
        cursor.moveToNext();
        while (cursor.isAfterLast() == false) {
            Object[] tableRow = new Object[cursor.getColumnCount()];
            for(int i=0; i<cursor.getColumnNames().length; i++) {
                int columnIndex = cursor.getColumnIndex(cursor.getColumnName(i));
                String columnValue = cursor.getString(columnIndex);
                tableRow[i] = columnValue;
            }
            result.add(tableRow);
            cursor.moveToNext();
        }

        cursor.close();

        return result;
    }

然后创建所需的对象。

public List<Vehicle> getVehicles() {
        List<Vehicle> vehicles = new ArrayList<Vehicle>();
        Cursor cursor = null;
        List<Object[]> objects = cursorToTableRows(cursor);
        for(Object[] row : objects) {
            int i=0;
            Vehicle vehicle = new Vehicle(row[i++].toString(), row[i++].toString()));
            vehicles.add(vehicle)
        }
        return vehicles;
    }

答案 3 :(得分:0)

根据this link,您可以使用以下内容迭代查询返回:

cursor.next();

并使用以下方式获取您要查找的位置的数据:

cursor.getString(0)

答案 4 :(得分:0)

来自Developer.android

:此接口提供对数据库查询返回的结果集的随机读写访问。

换句话说:query返回一组由游标表示的数据。首先,您需要确保获得有效的光标(非空),然后尝试将其移动到数据集中的所需位置(使用moveToXXX方法)。为了获取游标指向的数据,使用getXXX方法。完成后使用它确保调用close释放资源。

答案 5 :(得分:0)

成功完成光标设置后,您通常希望以某种形式将其显示在视图中。

有关使用光标适配器将新创建的 Cursor 与所需XML视图配对的详细但简单的示例,请查看以下答案:

https://stackoverflow.com/a/20532937/293280