You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中SQLiteDatabase类delete()方法如何实现大小写不敏感比较

Android SQLite 实现大小写不敏感删除的几种方案

你可以通过以下几种方式,在SQLiteDatabase.delete()方法中实现大小写不敏感的记录删除:

1. 在WHERE子句中直接使用COLLATE NOCASE

这是最直接的方式,只需修改delete方法的第二个参数(where条件),在占位符后加上COLLATE NOCASE即可:

val rows = db.delete(TABLE_NAME, "subject=? COLLATE NOCASE", arrayOf(subject))

原理是SQLite的COLLATE NOCASE会忽略字符串的大小写差异进行匹配,不管你传入的是"Math"、"math"还是"MATH",都会匹配到所有subject列值为这些变体的记录。

2. 统一转为小写(或大写)后对比

另一种思路是把数据库列的值和传入的参数都转为小写(或大写),再进行相等判断:

val rows = db.delete(TABLE_NAME, "LOWER(subject) = LOWER(?)", arrayOf(subject))

这种方式也能实现大小写不敏感,但要注意:如果subject列创建了索引,LOWER(subject)会导致索引无法被利用,删除操作的性能会下降,适合数据量不大的场景。

3. 建表时指定列的排序规则(一劳永逸)

如果你的业务场景中,subject列的所有查询、删除都需要大小写不敏感,可以在创建表时就给该列指定COLLATE NOCASE规则:

CREATE TABLE $TABLE_NAME (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    subject TEXT COLLATE NOCASE,
    -- 其他列定义
)

这样之后,原来的删除代码不需要做任何修改,默认的=比较就会忽略大小写,是最省心的方案。

内容的提问来源于stack exchange,提问作者KBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:30:43