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

Android Studio(Kotlin)中如何删除SQLite指定实际行而非ID对应行

解决方案

要删除数据库中实际排序后的第N行,你需要先明确行的排序逻辑(数据库表本身是无序的,必须指定排序规则才能确定“第4行”的位置),然后查询对应行的ID,再执行删除操作。

修改后的实现代码

fun deleteByRowPosition(TABLE_NAME: String, rowPosition: Int) {
    val db = this.writableDatabase
    // 1. 查询排序后目标行的ID,这里用SQLite默认的ROWID(对应插入顺序)排序
    val cursor = db.rawQuery(
        "SELECT $ID_COL FROM $TABLE_NAME ORDER BY ROWID LIMIT 1 OFFSET ?",
        arrayOf((rowPosition - 1).toString())
    )
    
    // 2. 若找到对应行,获取ID并执行删除
    if (cursor.moveToFirst()) {
        val targetId = cursor.getInt(cursor.getColumnIndexOrThrow(ID_COL))
        db.delete(TABLE_NAME, "$ID_COL=?", arrayOf(targetId.toString()))
    }
    
    // 3. 关闭资源
    cursor.close()
    db.close()
}

关键说明

  • 排序规则:如果你的“实际行”不是按插入顺序,而是按其他字段排序(比如时间、名称),把ORDER BY ROWID替换成你的排序逻辑即可,例如ORDER BY create_time DESC(按创建时间倒序)。
  • OFFSET 计算:SQL的OFFSET是从0开始计数,所以要删除第4行,需要跳过前3行(即rowPosition - 1)。
  • 边界处理:如果传入的rowPosition大于表中实际行数,cursor不会找到数据,不会执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:28