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
相关产品推荐
相关产品推荐

