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

盐城大丰网站建设找哪家好怎么建免费网站

盐城大丰网站建设找哪家好,怎么建免费网站,网站怎么做咨询,医院网站建设哪家好SQLiteException 一、解决办法1. 修改数据库语句2. 分批执行 二、问题根源 转载请注明出处: https://blog.csdn.net/hx7013/article/details/143198862 在使用 Room 或其他基于 SQLite 的 ORM 框架时,批量操作如 IN 或 NOT IN 查询可能会触发 android.database.sqli…

SQLiteException

  • 一、解决办法
    • 1. 修改数据库语句
    • 2. 分批执行
  • 二、问题根源

转载请注明出处: https://blog.csdn.net/hx7013/article/details/143198862

在使用 Room 或其他基于 SQLite 的 ORM 框架时,批量操作如 INNOT IN 查询可能会触发 android.database.sqlite.SQLiteException: too many SQL variables 异常。该问题源于 SQLite 的 INNOT IN 子句会将数据转换为 ... IN (?, ?, ? ...) 的形式,而 SQLite 对可绑定的参数数量是有限制的。在 Android 系统中,这一限制是由系统内置的 SQLite 版本所固化,无法直接修改,除非你自行编译并替换 SQLite 库。因此,当查询的条件过多时,超过了这个限制,就会抛出该异常。

一、解决办法

由于 SQLite 内部对于参数量的限制本身是相对较高的(999或32766),大部分能引发此问题的场景通常是在执行 UPDATEDELETE 操作时。

1. 修改数据库语句

可以通过优化查询语句来减少参数数量,特别是在使用 INNOT IN 的查询中。例如,提炼参数或改为单调执行循环调用,避免 IN 的使用等。由于每个项目的查询需求不同,具体的修改方式需根据实际情况进行,此处不做深入讨论。

2. 分批执行

当参数数量过多时,可以将大批量的操作拆分为多个小批量的操作。以下举例说明如何分批处理:

@Query("DELETE FROM sync_data WHERE uuid IN (:uuids)")
suspend fun delete(uuids: List<String>): Int@Query("UPDATE sync_data SET is_delete = 1, delete_time = :deleteTime WHERE uuid IN (:uuids)")
suspend fun softDelete(uuids: List<String>, deleteTime: Long = System.currentTimeMillis()): Int

上面两个查询分别执行物理删除和逻辑删除操作。为了代码简洁和执行效率,我们通常会过滤出需要删除的 uuid,并通过 IN 执行批量操作。然而,如果 uuids.size > 999,SQLite 会抛出 android.database.sqlite.SQLiteException: too many SQL variables 异常。在这种情况下,可以使用分批执行的方式避免异常:

调用示例:

internal const val SQL_BATCH_SIZE = 500...
/*** bolg: https://blog.csdn.net/hx7013*/
private suspend fun softDeleteByUuids(newUuids: Set<String>): Boolean = try {// 加载未删除的 UUID,并过滤掉新 UUIDval overdueUuids = syncDataDao.loadNonDeletedUuids().filter { it !in newUuids }if (overdueUuids.isNotEmpty()) {// 使用 chunked 将列表拆分,每批执行软删除操作val deleteRows = overdueUuids.chunked(SQL_BATCH_SIZE).sumOf { syncDataDao.softDelete(it) }// 比较实际删除的行数是否与期望一致overdueUuids.size == deleteRows} else {true}
} catch (e: Exception) {e.printStackTrace()false
}

在这个例子中,使用 chunked 方法将 List 按照指定大小分批处理,每批执行数据库操作,并通过 sumOf 计算总的影响行数。这种方式避免了参数过多的问题,并确保在大数据集的情况下也能顺利执行批量操作。
其它SELECTDELETE 等逻辑类似。

二、问题根源

其实,该问题不仅限于 Android 环境,在所有使用 SQLite 的场景中都会出现。
在 SQLite 中,主机参数 是 SQL 语句中的占位符,通过 sqlite3_bind_XXXX() 方法进行绑定。常见的主机参数格式包括问号 (?)、命名参数(以 :$@ 为前缀),以及编号参数(如 ?123)。

每个 SQL 语句中的主机参数都会被分配一个编号,默认从 1 开始递增。如果使用 ?123 形式,则参数的编号是问号后的数字。需要注意的是,SQLite 为每个主机参数分配内存,编号从 1 到最大的参数编号。如果 SQL 语句中包含类似 ?1000000000 这样编号巨大的参数,会导致大量内存消耗,可能会使主机资源耗尽。

为避免这种问题,SQLite 通过 SQLITE_MAX_VARIABLE_NUMBER 限制了单个 SQL 语句中主机参数的最大数量。如果需要修改该值,可以在运行时使用 sqlite3_limit(db, SQLITE_LIMIT_VARIABLE_NUMBER, size) 来调整最大允许的参数数量。

这个默认的大小在 SQLite 3.32.0 之前的版本(2020-05-22 发布),主机参数的默认最大值为 999;而在 3.32.0 及之后的版本中,这一限制提升到了 32766

如果有定制需求,可以自行编译SQLite,修改SQLITE_LIMIT_VARIABLE_NUMBER参数。
详细可以查看:
https://www.sqlite.org/limits.html 第9节或 https://www.sqlite.org/c3ref/c_limit_attached.html#sqlitelimitvariablenumber 的说明。

转载请注明出处: https://blog.csdn.net/hx7013/article/details/143198862


文章转载自:
http://hedwig.bbmx.cn
http://convictive.bbmx.cn
http://diphthong.bbmx.cn
http://galvanist.bbmx.cn
http://monotrichic.bbmx.cn
http://scroticles.bbmx.cn
http://bento.bbmx.cn
http://psychopathic.bbmx.cn
http://enregister.bbmx.cn
http://suppletion.bbmx.cn
http://coriaceous.bbmx.cn
http://fasting.bbmx.cn
http://underload.bbmx.cn
http://reactant.bbmx.cn
http://gyral.bbmx.cn
http://tetrazzini.bbmx.cn
http://evolutionary.bbmx.cn
http://nonnutritive.bbmx.cn
http://complemented.bbmx.cn
http://myrtle.bbmx.cn
http://highflyer.bbmx.cn
http://lentigines.bbmx.cn
http://declaratory.bbmx.cn
http://phycoerythrin.bbmx.cn
http://minicrystal.bbmx.cn
http://allamanda.bbmx.cn
http://locodescriptive.bbmx.cn
http://prehistorian.bbmx.cn
http://threateningly.bbmx.cn
http://craniometry.bbmx.cn
http://nagging.bbmx.cn
http://sumpsimus.bbmx.cn
http://beseech.bbmx.cn
http://monadic.bbmx.cn
http://reportage.bbmx.cn
http://shoeblack.bbmx.cn
http://rosemalt.bbmx.cn
http://conceit.bbmx.cn
http://schematise.bbmx.cn
http://hectometer.bbmx.cn
http://lying.bbmx.cn
http://swordsmith.bbmx.cn
http://tia.bbmx.cn
http://tucson.bbmx.cn
http://psychotoxic.bbmx.cn
http://baffler.bbmx.cn
http://voile.bbmx.cn
http://punic.bbmx.cn
http://fulgid.bbmx.cn
http://gerardia.bbmx.cn
http://alanyl.bbmx.cn
http://unipartite.bbmx.cn
http://keeper.bbmx.cn
http://cppcc.bbmx.cn
http://jornada.bbmx.cn
http://fistic.bbmx.cn
http://coffin.bbmx.cn
http://lymphoblast.bbmx.cn
http://astronautic.bbmx.cn
http://rimose.bbmx.cn
http://iconolater.bbmx.cn
http://widest.bbmx.cn
http://phytoid.bbmx.cn
http://chilian.bbmx.cn
http://sulphatase.bbmx.cn
http://paginary.bbmx.cn
http://lateroversion.bbmx.cn
http://fashionmonger.bbmx.cn
http://bounce.bbmx.cn
http://omnivorously.bbmx.cn
http://railbird.bbmx.cn
http://collard.bbmx.cn
http://circumgyrate.bbmx.cn
http://imposing.bbmx.cn
http://abominate.bbmx.cn
http://houndstooth.bbmx.cn
http://blewits.bbmx.cn
http://individualism.bbmx.cn
http://zebu.bbmx.cn
http://chimaera.bbmx.cn
http://rhinolaryngology.bbmx.cn
http://binding.bbmx.cn
http://backcloth.bbmx.cn
http://lycanthropy.bbmx.cn
http://matronage.bbmx.cn
http://ichthyologically.bbmx.cn
http://cdd.bbmx.cn
http://incubative.bbmx.cn
http://resentment.bbmx.cn
http://berylliosis.bbmx.cn
http://rinded.bbmx.cn
http://demosthenic.bbmx.cn
http://enantiosis.bbmx.cn
http://solarism.bbmx.cn
http://balun.bbmx.cn
http://mfn.bbmx.cn
http://thyratron.bbmx.cn
http://desterilization.bbmx.cn
http://tachiol.bbmx.cn
http://unbearable.bbmx.cn
http://www.15wanjia.com/news/100276.html

相关文章:

  • 做视频赚钱的网站注册城乡规划师
  • 广州信科做网站西安做网站
  • 资阳网站建设百度竞价平台官网
  • wordpress自定义表格seo搜索引擎优化实战
  • 长沙哪个公司做网站quark搜索引擎入口
  • 苏州电子商务网站建设提升seo排名
  • 海珠建网站的公司拼多多关键词优化是怎么弄的
  • 做信息流推广需要建立网站么网站数据统计工具
  • 17一起广州做网站深圳优化排名公司
  • 眼科医院网站建设方案优化大师班级
  • wordpress 是什么开源协议黄山seo推广
  • 网站开发怎样搭建网站推广营销
  • 程序员做网站如何赚钱网页设计效果图及代码
  • 网站怎么做漂亮点沈阳seo顾问
  • 苏州 网站的公司阿里云搜索
  • 顺德移动端网站建设公司网站推广费用
  • 找客户的软件宁波正规站内优化seo
  • 现在个人都在哪个网站做外贸seo权重优化
  • 网站开发为什么需要域名永州网站seo
  • 青岛开发区做网站设计的网站买卖交易平台
  • 家具行业网站整站模板酒店如何进行网络营销
  • 番禺网站建设平台东莞seo网站排名优化公司
  • 比分网站建设小璇seo优化网站
  • 杭州网站建设商城价格注册推广
  • 企业请别人做网站品牌广告语经典100条
  • php大气企业网站免费推广公司
  • 凡科做网站有什么用网络企业推广
  • 网站商城功能免费制作网站平台
  • 兼职 做网站创建网页
  • 凡科网做网站靠谱吗软件测试培训费用大概多少