【问题标题】:Huge Text in Sqlite retrievalSqlite 检索中的大文本
【发布时间】:2018-02-08 03:54:33
【问题描述】:

我在 sqlite android 中有一个用例,其中我在 android api 响应中有大量文本,它正确存储在 android sqlite 字段名称图像中

由于 sqlite 说 TEXT 字段可以存储非常长的文本,因此文本正确存储在 sqlite 中

拦截器:

当涉及到检索该文本文件时,我使用了下面的代码 sn-p:

 questionModel.setImageBuffer(new StringBuffer(imgData == null ? "" : 

    (questionCursor.getString(questionCursor.getColumnIndex(Constants.COLUMN_QUESTION_IMAGE)))));

基本上这会将内容包装在字符串中,因此它不适合字符串并且内容被破坏

任何人都可以建议我如何将该字段正确提取到 StringBuffer 变量中

编辑:

看看下面的图片,文本存储已满,它的大小也显示在 sqlite 浏览器中,我提取了那个 db 并验证了它。

【问题讨论】:

  • 你确定SQLITE中的文本是完整存储的,而不是剪切的?列的大小不是无限的,我觉得你在建表的时候一定要指定
  • @VladMatvienko 请查看编辑后的图像,我 100% 确定 db 中的文本是完整的
  • 我在互联网上没有发现 SQLITE 或 Java 字符串的任何有效限制,或任何与它们相关的内容。所以我不认为有某种限制。尝试将复杂的代码分成不同的行和步骤,并检查它至少在哪一行出错。
  • @VladMatvienko 只是 chk 字符串数据类型限制,因此当我从光标获取文本时,它会将其包装在字符串数据类型中,因此字符串中断
  • @VladMatvienko 在使用SQLiteCursor 时限制为CursorWindow,如果我没记错的话,该类使用的大小为 2M

标签: android android-sqlite


【解决方案1】:

一种解决方案是将文本存储为文件并保存路径而不是数据库中的文本。

原因是根据Cursor size limit in Android SQLiteDatabase有一个限制(1Mb)。

其中一篇文章指向:-

Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb, 该进程的所有正在进行的事务共享。 因此,当有很多 即使大多数个别交易仍在进行中 大小适中。 TransactionTooLargeException

但是根据后面的帖子,限制是每行 2MB。 SQLite CursorWindow limit - How to avoid crash

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多