Flutter | 行太大无法适应CursorWindow

5

我正在开发一个Flutter应用程序,并使用标准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'}

当我试图读取保存在名为“sessions”的表中的大量内容时,遇到了“行过长”错误。

每100毫秒采集3维数组的5个传感器数据,持续30分钟,并且可能会更多……每个会话中> 300,000个数字数据(最多可达10Mo)。

如何避免这种错误?


当然不是字面意义上的“blob”。它们都有特定的名称,看看SQLite查询:SELECT sessionId、deviceId、startDate、endDate、...、timestamp FROM sessions - Jérémy
对于大行,它们是JSON字符串化的二维数组。我们称它们为rowA,rowB,rowC,rowD。包含:例如形状为(X,Y)的"[[95,90],[96,95],...] "其中Y已知,但X是可变的。 - Jérémy
它们的大小很大吗?例如一两MB? - pskink
每行最多2Mo。意思是每个会话最多10Mo。 - Jérémy
1
你可能是对的。我在某个地方看到过类似的东西...那么我应该如何在SQLite中管理这么多数据? - Jérémy
显示剩余2条评论
1个回答

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接