在表中选择多行并插入到数组中

时间:2012-06-07 06:43:57

标签: android sqlite

我有一张叫做食物的桌子。我正在选择食品的“类别”,我想在列表视图中显示它。这是我试过的代码。

Cursor c = db.query(DATABASE_TABLE,
                new String[] { "category" }, null, null, null, null, null);
        ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();           
        if(c.moveToFirst())
        {
            do
            {   ArrayList<String> recipe = new ArrayList<String>();
                recipe.add(c.getString(1));
                recipe.add(c.getString(2));
                recipe.add(c.getString(3));
                recipe.add(c.getString(4));
                results.add(recipe);
            }while(c.moveToNext());
            if(c != null && !c.isClosed())
               c.close();
        }

2 个答案:

答案 0 :(得分:1)

立即尝试,

Cursor c = db.query(DATABASE_TABLE,
                new String[] { "category" }, null, null, null, null, null);
        ArrayList<String> results = new ArrayList<String>();           
        if(c.moveToFirst())
        {
            do
            {   
             results.add(c.getString(0)); // instead of 0 Index of Category column in your case
            }while(c.moveToNext());
            if(c != null && !c.isClosed())
               c.close();
        }

从数据库查询中您只选择类别列,因此光标中只有一列结果,其中0开始为索引。因此c.getString(1)c.getString(4)意义较小。如果您从表中选择所有数据,那么只有您获得所有列..

答案 1 :(得分:1)

我看到了您的问题,您只返回一列(category),但您正在尝试访问多个不同的列。

你应该至少返回五个(因为你试图访问最多4个,光标列从0开始)。

如果您要尝试提取某个类别的项目列表,则需要更改查询。有点像这样:

String query = "SELECT * FROM " + DATABASE_TABLE + " WHERE category = " + category;
return mDb.rawQuery(query, null);

这将选择具有与变量category中包含的内容匹配的类别的所有项目,并返回该行中的所有线圈列。