当前位置: 首页 > article >正文

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

报错信息:

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,具体取决于编译时配置。

解决方法:分批查询

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
}

http://www.kler.cn/a/502940.html

相关文章:

  • 【Qt】QWidget核心属性2(windowOpacity、cursor、font、toolTip、focusPolicy、styleSheet)
  • Vue2:el-table 最后一列的操作按钮不换行,按钮过多时展示【更多】
  • 掌握 React 关键:理解 super () 和 super (props) 的不同应用
  • (PVG)Periodic Vibration Gaussian:自动驾驶过程中的三维重建 论文解读
  • 3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
  • java fastjson2 解析JSON用法解析
  • [3D] 3D雷达天眼监控系统:打造智能城市的安全防线
  • 多模态论文笔记——BLIP2
  • 大语言模型的稀疏性:提升效率与性能的新方向
  • 《AI赋能鸿蒙Next,开启智能关卡设计新时代》
  • occ的开发框架
  • vue3项目大屏适配方案(scale)及vue-tv-focusable库使用
  • 基于访问表的安全防范策略
  • 【samba】主机名访问ubuntu的samba文件夹
  • 消息中间件面试
  • Ubuntu如何安装ESP32-idf
  • UML系列之Rational Rose笔记七:状态图
  • 50_Lua垃圾回收
  • 使用 Debug 类的 Assert 方法查找 C# 中的错误
  • 施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程