Android从sqlite数据库中获取多个项目

时间:2011-11-12 11:57:30

标签: java android sql sqlite data-structures

我想在不使用for / while / dowhile循环的情况下更新(检索并可能编辑)SQLite数据库中的多个项目

使用光标可以吗?我想限制表中的个人查找

是否有一些复杂的Android数据对象我可以将SQL查询的所有结果转储到其中,然后我可以解析循环

我听说过Parceable和可序列化的对象,但这就是我使用数据库的方式。

我目前有方法通过单个行调用元素。我可以将该方法放在for循环中,或者我可以将Cursor的查询放在for循环中但是我不想进行那么多次访问。

public String fetchDay(long rowId) throws SQLException {

    Cursor mCursor =

        mapDb.query(true, DAY_TABLE, new String[] {KEY_ROWID, KEY_DAY}, KEY_ROWID + "=" + String.valueOf(rowId), null,
                null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    String result = mCursor.getString(mCursor.getColumnIndex(KEY_DAY));
    mCursor.close();
    return result;

}

如何在不循环

的情况下获取该表的所有元素并将其存储在复杂对象中

洞察力赞赏

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容更改查询以返回多行:

KEY_ROWID + " >= " + String.valueOf(firstRowId) + " AND " + KEY_ROWID + " <= " + String.valueOf(lastRowId)

作为你的where子句。

这样,Cursor将返回一系列行,然后您可以使用while循环迭代它,如下所示:

mCursor.moveToFirst();  
while (!mCursor.isAfterLast()) {  
    results.add(mCursor.getString(mCursor.getColumnIndex(KEY_DAY)));  
    mCursor.moveToNext();  
}

结果为List<String>

请注意,此解决方案中使用的while循环比反复查询表要便宜,因为它会迭代Cursor对象,而不是进行多次I / O操作

答案 1 :(得分:1)

“是否有一些复杂的Android数据对象,我可以将SQL查询的所有结果转储到其中,然后我可以解析循环?”

是的,这就是Cursor。它表示数据库查询返回的结果集,类似于JDBC结果集。应该将Cursor视为数据库查询结果的容器,尽管我不确定它是否包含数据本身。 如果数据库查询返回多行,则将通过游标引用它们。 在article获取战利品以获得更好的想法。

无论哪种方式,您都必须使用某种循环来迭代结果集中每一行的光标。