Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法

报错信息:

bash 复制代码
android.database.sqlite.SQLiteException: 
	too many SQL variables (code 1 SQLITE_ERROR): 
 		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,具体取决于编译时配置。

解决方法:分批查询

kotlin 复制代码
fun queryInBatches(dao: YourDao, ids: List<Long>): List<YourEntity> {
    val batchSize = 900 // 每批最大数量
    val result = mutableListOf<YourEntity>()

	// 将 ids 按照 batchSize 分成若干小批次。
    ids.chunked(batchSize) { chunk ->
        result.addAll(dao.queryByIds(chunk))
    }

    return result
}
相关推荐
Csvn1 小时前
📊 SQL 入门 Day 18:索引原理
后端·sql
DBA小马哥1 小时前
关系型数据库核心概念手册:SQL、事务与存储引擎的技术脉络
数据库·sql
灯澜忆梦1 小时前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
怪奇云呼军5 小时前
从声音特征到 CRM 回流:闪电智能 Voice Agent 沟通策略自适应系统 v1 实战
android·人工智能·python·音视频·语音识别
哦哦~9217 小时前
北理工|Composites Part‑A 综述:纤维‑增强复合材料传统成型与增材制造全解析
android·制造·复合材料·增材制造
一笑的小酒馆8 小时前
Android视频直播播放器简单封装
android
盗理者8 小时前
AI Agent 技能分享|SQL 性能诊断与优化
java·sql·spring·skill
工会代表9 小时前
安卓手机搭建SOCKS5代理教程
android
雨白9 小时前
Android AOP 切面编程实战:优雅地处理全局断网拦截
android·架构
上海云盾商务经理杨杨10 小时前
SQL 盲注入渗透实战!无报错页面也能成功注入
数据库·sql