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

ROOM 数据库 | 实现自定义 ContentProvider 具有条件的批量删除、查询功能

Demo

工具类

基于Android Room的安全SQL构建工具类实现,包含DELETE和SELECT示例,用于包含条件的delete和query。

Pair 方案
// 文件参考:app/src/main/java/com/xxx/xx/util/SqlBuilder.ktobject SqlBuilder {/*** 构建安全DELETE语句* @param table 目标表名* @param conditions WHERE条件表达式(不带WHERE关键字)* @param args 条件参数数组* @return Pair(first=完整SQL, second=参数数组)** 示例输入:* table = "user", * conditions = "age > ? AND name = ?", * args = ["18", "John"]* 输出:Pair("DELETE FROM user WHERE age > ? AND name = ?", ["18","John"])*/fun buildDelete(table: String,conditions: String? = null,args: Array<String>? = null): Pair<String, Array<String>> {val sql = StringBuilder("DELETE FROM $table")val params = mutableListOf<String>()conditions?.let {sql.append(" WHERE $it")args?.let { params.addAll(it) }}return Pair(sql.toString(), params.toTypedArray())}/*** 构建安全SELECT语句* @param table 目标表名* @param columns 查询列(默认*)* @param conditions WHERE条件表达式* @param args 条件参数* @param orderBy 排序子句* @return 完整SQL和参数数组*/fun buildQuery(table: String,columns: Array<String> = arrayOf("*"),conditions: String? = null,args: Array<String>? = null,orderBy: String? = null): Pair<String, Array<String>> {val sql = StringBuilder("SELECT ${columns.joinToString()}")sql.append(" FROM $table")val params = mutableListOf<String>()conditions?.let {sql.append(" WHERE $it")args?.let { params.addAll(it) }}orderBy?.let {sql.append(" ORDER BY $it")}return Pair(sql.toString(), params.toTypedArray())}
}

Pair(deleteSql.toString(), args.toTypedArray()) 是Kotlin中用于返回两个相关值的标准方式,具体解释如下:
1. Pair结构:
// 等价于创建一个包含两个元素的数据对象
data class SqlResult(
    val sql: String, 
    val args: Array<String>
)
2. 实际作用:

  • deleteSql.toString():将构建好的DELETE SQL语句转为字符串
    • // 示例输出:"DELETE FROM ims_records WHERE status = ?"
  • args.toTypedArray():将条件参数集合转为固定大小的数组
    • // 示例输出:arrayOf("EXPIRED")

3. 使用场景(在DAO中的典型用法)

@Dao
interface DataDao {@RawQueryfun executeRaw(query: SimpleSQLiteQuery): Int// 调用示例fun deleteRecords(condition: Pair<String, Array<String>>) {executeRaw(SimpleSQLiteQuery(condition.first, condition.second))}
}

4. Q:为什么要用Pair而不是单独返回?<

http://www.xdnf.cn/news/6454.html

相关文章:

  • 傻子学编程之——Java并发编程的问题与挑战
  • WHAT - 前端开发流程 SOP(标准操作流程)参考
  • 芋道项目,商城模块数据表结构
  • NetSuite CSV导入Item Fulfillment的功能测试
  • ruskal 最小生成树算法
  • CPU cache基本原理
  • 互联网大厂Java求职面试:AI与大模型集成的云原生架构设计
  • 崩坏星穹铁道风堇前瞻养成攻略 崩坏星穹铁道风堇配队推荐
  • 【25软考网工】第六章 (6)防火墙技术、IDS入侵检测系统和IPS入侵防御系统
  • pytest 框架-第一集:初识
  • 3.2.4 掌握RDD行动算子
  • 周赛好题推荐
  • 采购管理系统实施要点有哪些,流程优化与风险防控指南
  • 论文中的“研究方法”怎么写?
  • NHANES指标推荐:OBS
  • 投影仪基础知识及选购方向小记①
  • [GPRC服务使用]grpc的基础数据类型与C++中的赋值方法
  • Ascend的aclgraph(九)AclConcreteGraph:e2e执行aclgraph
  • Linux --systemctl损坏
  • c++ std::deque
  • 国内优质沉金PCB厂家有哪些?
  • MySQL 读写分离
  • Java引用类型
  • Elasticsearch 快速入门指南
  • 山东大学计算机图形学期末复习8——CG11下
  • 文档多模态识别工具对比:MinerU、PaddleOCR、Marker
  • 2089. 找出数组排序后的目标下标——O(n)做法!
  • OpenCV CUDA模块中逐元素操作------数学函数
  • 原生微信小程序 textarea组件placeholder无法换行的问题解决办法
  • Secs/Gem第五讲(基于secs4net项目的ChatGpt介绍)