gpt4 book ai didi

java - SQLiteBlobTooBigException : Row too big to fit into CursorWindow while writing to DB

转载 作者:行者123 更新时间:2023-12-01 14:33:30 25 4
gpt4 key购买 nike

当我尝试添加到 android 上的 sqllite DB 时,我看到了上述错误。我正在使用 cloudant 库。这是堆栈跟踪:

2019-07-17 18:04:48.292 5522-5753/org.iprd.identity E/SQLiteQuery: exception: Row too big to fit into CursorWindow requiredPos=0, totalRows=1; query: SELECT docs.docid, docs.doc_id, revid, sequence, current, deleted, parent, json FROM revs, docs WHERE docs.docid=? AND revs.doc_id=docs.doc_id AND revid=? ORDER BY revs.sequence LIMIT 1
2019-07-17 18:04:48.302 5522-5522/org.iprd.identity E/DatabaseImpl: Failed to create document
java.util.concurrent.ExecutionException: android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow requiredPos=0, totalRows=1
at java.util.concurrent.FutureTask.report(FutureTask.java:123)
at java.util.concurrent.FutureTask.get(FutureTask.java:193)
at com.cloudant.sync.internal.documentstore.DatabaseImpl.get(DatabaseImpl.java:1084)
at com.cloudant.sync.internal.documentstore.DatabaseImpl.create(DatabaseImpl.java:925)

我以前从未遇到过这个问题,但是,我最近进行了更改并开始使用 3rd 方工具给我一些图像。使用这个新工具,图像尺寸似乎比以前大得多。我通过对图像进行 Base64 编码将这些图像作为字符串存储在我的数据库中。但是,使用这个新工具,在存储图像时,我得到了上述异常。

我有一个单元测试,我尝试使用该图像中生成的字符串之一,但这也会引发错误,即字符串大小太大并且甚至无法编译。

解决这个问题的最佳方法是什么? -
  • 我想做的是将图像存储在设备本身中,并将路径存储在数据库中。
  • 我们可以对图像进行一些压缩以减小其文件大小吗?
  • 是否可以调整一些数据库设置以确保它可以处理更大的图像尺寸?

  • 提前致谢!

    最佳答案

    What I was thinking of doing is to store the image in the deviceitself and just store the path in the DB.


    不打算回答,因为你最适合回答这个问题。

    Is there some compression we can do to the image to reduce its filesize?


    可能,但这并不一定会消除问题。即使您将图像压缩为 2Mb( 4Mb 光标窗口的限制的一半),那么可能一次只有 1 行适合光标窗口。结果可能是性能非常差,并且瓶头不是真正的 SQLite,而是处理光标。
  • 不推荐

  • 另一种解决方案,但仍然很昂贵,将图像存储在部分/ block 中,可以找到这样做的示例(注意没有进行调整来建立 256kb block 大小) here . 注意到响应时间被认为很差 .
  • 不推荐但如果性能不佳不是问题,那么可能是一个解决方案

  • 不需要额外压缩/解压缩开销的解决方案是将图像或超过设定大小的图像存储在文件系统(例如外部存储)中并存储路径或路径的一部分。
  • 后一种选择,将小图像存储在数据库中,将大图像存储为文件,可以利用 35% Faster Than The Filesystem )。
  • answer here 中的混合路径/blob 解决方案示例.
  • 备注 此示例可用作仅存储路径或混合解决方案的基础。

  • 推荐

  • Is it possible to tune some db setting to ensure that it can handlelarger image sizes?


    是的。
    你可以考虑:-
  • 优化您的查询。作为开始,请参阅 EXPLAIN QUERY PLANThe SQLite Query Optimizer Overview
  • 增加页面大小(注意限制),
  • 增加cache size ,
  • 风险转向synchronous关闭和
  • 使用 exclusive locking 的风险.
  • 应用 compile time options 编译您自己的 SQLite 调整版本适合。
  • 进一步阅读上述链接,因为可能有其他适用的调整设置。
  • 关于java - SQLiteBlobTooBigException : Row too big to fit into CursorWindow while writing to DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57107489/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com