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
}
相关推荐
yipiantian1 小时前
sql根据两个点的经纬度计算距离
sql
Elastic 中国社区官方博客4 小时前
Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图
大数据·sql·elasticsearch·搜索引擎·数据可视化·kibana
写代码的Eleven4 小时前
Rk3568 Andorid 11 新增adb检测,只有使用客户私钥的设备才能链接adb
android·adb
_可乐无糖4 小时前
深度解析 pytest 参数化与 --count 执行顺序的奥秘
android·python·ui·ios·appium·自动化·pytest
VX_CXsjNo14 小时前
免费送源码:Java+ssm+Android 基于Android系统的外卖APP的设计与实现 计算机毕业设计原创定制
android·java·css·spring boot·mysql·小程序·idea
超厂长4 小时前
从github上,下载的android项目,从0-1进行编译运行-踩坑精力,如何进行部署
android·github
weixin_438197384 小时前
mysql存储过程创建与删除(参数输入输出)
数据库·sql·mysql
芊言芊语5 小时前
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
数据库·sqlite
刘亿辰5 小时前
(一)QSQLite3库简介
sqlite·sqlite数据库加密·qsqlite3