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

