获取SQLite数据库并将其存储在对象数组中

时间:2011-07-21 19:36:04

标签: android sqlite object arraylist cursor

我正在查看Android SDK中的Notes应用示例。我想要学习的是不是使用CursorAdapter来传递给ListAdpater / ListView进行整理,我想知道自己如何处理数据;特别是在ArrayList表单中。在示例中,注释基本上具有id,title和body。我想知道如何查询SQLite数据库并使用它返回的游标来收集数据并创建一个对象的对象实例,我将其称为Note,其中包含id,title和body的参数。我最终希望将所有这些对象存储到ArrayList中进行管理。我只是不确定如何处理Cursor。这是一个相当普遍的问题,但我只需要有人指出我正确的方向。

3 个答案:

答案 0 :(得分:5)

我可能不会得到您的问题,但您需要查询您的数据库,然后将游标数据添加到ArrayList?

    List<String> pointsList = new ArrayList<String>();
    database = openOrCreateDatabase("favorites", SQLiteDatabase.OPEN_READWRITE, null);
    if(database!=null)
    {
        c= database.rawQuery(QUERY, null);
        c.moveToFirst();
        while(c.isAfterLast()==false)
        {
            pointsList.add(c.getInt(c.getColumnIndex("id")); // do the same for other columns
            c.moveToNext();
        }

    }
   database.close();
   c.close();

答案 1 :(得分:1)

实际上我在玩完之后想出来了。所以我意识到使用cursor.getColumnIndex("name_of_column")将返回列的索引,以便在cursor.getInt(cursor.getColumnIndex("_id"));之类的命令中使用。我所要做的就是使用for循环遍历整个列表并使用cursor.moveToNext()来迭代收集的行。在我发布这个问题之后,我想出了这个会议记录。 :)

答案 2 :(得分:0)

这可能对您有帮助,

   public ArrayList<ArrayList<Object>> getAllRowsAsArrays()
    {
        // create an ArrayList that will hold all the data collected from
        // the database.
        ArrayList<ArrayList<Object>> dataArrays = new ArrayList<ArrayList<Object>>();

        // This is a database call that creates a "cursor" object.
        // The cursor object store the information collected from the
        // database and is used to iterate through the data.
        Cursor cursor;

        try
        {
            // ask the database object to create the cursor.
            cursor = db.query(
                    TABLE_NAME,
                    new String[]{TABLE_ROW_ID, TABLE_ROW_ONE, TABLE_ROW_TWO},
                    null, null, null, null, null
            );

            // move the cursors pointer to position zero.
            cursor.moveToFirst();

            // if there is data after the current cursor position, add it
            // to the ArrayList.
            if (!cursor.isAfterLast())
            {
                do
                {
                    ArrayList<Object> dataList = new ArrayList<Object>();

                    dataList.add(cursor.getLong(0));
                    dataList.add(cursor.getString(1));
                    dataList.add(cursor.getString(2));

                    dataArrays.add(dataList);
                }
                // move the cursor's pointer up one position.
                while (cursor.moveToNext());
            }
        }
        catch (SQLException e)
        {
            Log.e("DB Error", e.toString());
            e.printStackTrace();
        }

        // return the ArrayList that holds the data collected from
        // the database.
        return dataArrays;
    }