【问题标题】:Android fetch multiple items from sqlite databaseAndroid从sqlite数据库中获取多个项目
【发布时间】:2011-11-12 11:57:30
【问题描述】:

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

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

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

我听说过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;

}

如何在不循环的情况下获取该表的所有元素并将其存储在一个复杂的对象中

洞察力赞赏

【问题讨论】:

    标签: java android sql sqlite data-structures


    【解决方案1】:

    您可以更改查询以返回多行,方法是:

    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&lt;String&gt;

    请注意,此解决方案中使用的 while 循环比一遍又一遍地查询表要便宜得多,因为它在内存上的 Cursor 对象上进行迭代,而不是进行多次 I/O 操作

    【讨论】:

    • 完美,我将如何更新数据库中的多个项目?我面临着同样的困境。我可能会发布一个新问题,我会把它链接给你
    【解决方案2】:

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

    是的,那就是Cursor。它表示数据库查询返回的结果集,类似于 JDBC 结果集。游标应该被视为数据库查询结果的容器,尽管我不确定它是否包含数据本身。 如果您的数据库查询返回多行,您将通过游标引用它们。 在这个article 上掠夺以获得更好的主意。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2016-05-08
      • 2014-06-30
      • 2013-04-13
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多