Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 缘故原 ...

打印 上一主题 下一主题

主题 803|帖子 803|积分 2409

报错信息:
  1. android.database.sqlite.SQLiteException:
  2.         too many SQL variables (code 1 SQLITE_ERROR):
  3.                 while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)
复制代码
SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句中包含的绑定变量超过了 SQLite 的限定。SQLite 默认的最大绑定变量数量是 999。如果您使用的 SQL 包含的绑定参数(如 IN 查询中的参数个数)超过了这个限定,就会导致此错误。
SQLITE_MAX_VARIABLE_NUMBER 是 SQLite 中界说的绑定变量的最大数量限定,它的值大概因版本和具体的编译设置而有所不同。以下是不同版本的默认值和相关分析:


  • SQLite 3.32.0 及以上版本:
    默认值为 32766。
    这是当前支持的最大值,条件是 SQLite 编译时未限定更小的值。
  • SQLite 3.22.0 到 3.31.1:
    默认值为 999。
  • SQLite 3.6.19 到 3.21.0:
    默认值为 999。
  • SQLite 3.6.18 及更早版本:
    默认值为 250, 500 或 999,具体取决于编译时设置。
解决方法:分批查询

  1. fun queryInBatches(dao: YourDao, ids: List<Long>): List<YourEntity> {
  2.     val batchSize = 900 // 每批最大数量
  3.     val result = mutableListOf<YourEntity>()
  4.         // 将 ids 按照 batchSize 分成若干小批次。
  5.     ids.chunked(batchSize) { chunk ->
  6.         result.addAll(dao.queryByIds(chunk))
  7.     }
  8.     return result
  9. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表