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
}
相关推荐
_龙小鱼_1 小时前
卡顿检测与 Choreographer 原理
android·kotlin
云手机管家2 小时前
账号风控突破:云手机设备指纹篡改检测与反制技术解析
android·运维·网络协议·网络安全·智能手机·矩阵·自动化
千里马-horse2 小时前
Detected for tasks ‘compileDebugJavaWithJavac‘ (17) and ‘kspDebugKotlin‘ (21).
android·jdk·kspdebugkotlin
tebukaopu1483 小时前
官方 Elasticsearch SQL NLPChina Elasticsearch SQL
大数据·sql·elasticsearch
IT小郭.3 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
柯南二号4 小时前
【Android】Android 实现一个依赖注入的注解
android
愛~杦辷个訾6 小时前
芋道项目,商城模块数据表结构
java·sql·芋道·yudao-cloud·芋道商城
archko6 小时前
语音识别-3,添加ai问答
android·人工智能
Le_ee12 小时前
sqli-labs靶场第七关——文件导出注入
数据库·sql·网络安全·php·sql注入·sqli—labs