【问题标题】:Flutter | Row too big to fit into CursorWindow颤振 |行太大,无法放入 CursorWindow
【发布时间】:2020-02-07 02:42:07
【问题描述】:

我正在开发一个颤振应用程序,我使用标准 SQLite 数据库来存储来自传感器的信息。 我收到了错误:

E/SQLiteQuery(11895): exception: Row too big to fit into CursorWindow requiredPos=0, totalRows=3; query: SELECT sessionId, deviceId, startDate, endDate, ... , timestamp FROM sessions
E/flutter (11895): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: DatabaseException(Row too big to fit into CursorWindow requiredPos=0, totalRows=3) sql 'SELECT sessionId, deviceId, startDate, endDate, ..., timestamp FROM sessions'}

当我试图读取保存在包含大量内容的“会话”表中的数据时。

3 个昏暗阵列的 5 个传感器,每 100 毫秒,在 30 分钟内,但可能更多...> 300 000 个数字数据 每个会话(最多 10 个月)。

如何避免这种'row to big'的错误?

【问题讨论】:

  • sessions 表中是否有任何 blob 字段?
  • 字面意思是blob,当然不是。它们都有特定的名称,请查看 SQLite 查询:SELECT sessionId, deviceId, startDate, endDate, ... , timestamp FROM sessions
  • 对于大行,它们是 JSON 字符串化的二维数组。让我们称他们为rowA, rowB, rowC,rowD。包含:"[[95,90], [96,95], ... ]" 以形状 (X,Y) 为例,其中 Y 是已知的,但 X 是可变的。
  • 它们很大吗?比如一两MB?
  • 你可能是对的。我在某处看到过这样的事情......那么我应该如何在 SQLite 中管理这么多数据?

标签: sqlite flutter dart large-data


【解决方案1】:

错误消息Row too big to fit into CursorWindow requiredPos=0, totalRows=3; query: SELECT sessionId, deviceId, startDate, endDate, ... , timestamp FROM sessions 指出您正在尝试将行放在 CursorWindow 上。上次我记得 CursorWindow(缓冲区)有 2Mb 可用。

规避此问题的一种方法是减少查询中使用的列。您可能还希望跟踪要提取的存储数据,以避免超过 CursorWindow 限制。

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2019-01-28
    • 2019-11-28
    • 2019-11-22
    • 2021-12-19
    • 2021-07-11
    • 2021-07-21
    • 2019-10-31
    • 2020-02-12
    相关资源
    最近更新 更多