获取可写数据库实例
通过SQLiteDatabase
对象调用getWritableDatabase()
方法,确保对数据库有写入权限。
构建删除条件
使用WHERE
子句指定删除条件(如主键ID、唯一标识符等),避免误删数据。
执行删除操作
调用delete()
方法,传入表名和条件,返回被删除的行数。
事务管理(可选)
对多次数据库操作建议使用事务,保证原子性。
// 获取数据库实例 val db = databaseHelper.getWritableDatabase() // 执行删除(假设以ID为条件) val deleteSql = "DELETE FROM table_name WHERE id = ?" db.execSQL(deleteSql, arrayOf(targetId)) // 关闭数据库 db.close()
delete()
API// 获取数据库实例 val db = databaseHelper.getWritableDatabase() // 删除操作(返回受影响行数) val rowsDeleted = db.delete( tableName, // 表名 "id = ?", // 条件 arrayOf(targetId.toString()) // 条件参数 ) // 检查是否删除成功 if (rowsDeleted > 0) { Log.d("DB", "删除成功") } else { Log.e("DB", "未找到匹配项") } // 关闭数据库 db.close()
databaseHelper.writableDatabase.apply { beginTransaction() try { delete("table_name", "id = ?", arrayOf(targetId.toString())) setTransactionSuccessful() } catch (e: Exception) { Log.e("DB", "删除失败: ${e.message}") } finally { endTransaction() } }
问题 | 解决方案 |
---|---|
删除后数据未消失 | 检查WHERE 条件是否正确,确保条件值与数据库实际数据类型匹配(如字符串需加引号)。 |
误删多条数据 | 避免使用模糊条件(如WHERE id > 5 ),建议用主键或唯一索引作为条件。 |
事务未提交导致失败 | 确保调用setTransactionSuccessful() ,并在finally 中执行endTransaction() 。 |
关闭数据库失败 | 使用try-finally 结构确保db.close() 一定被执行,避免资源泄漏。 |
问题1:如何批量删除多个Item?
解答:
可通过循环执行delete()
方法,或构造WHERE
条件包含多个值(如id IN (?, ?, ?)
)。
val idsToDelete = listOf(1, 3, 5) val placeholders = idsToDelete.joinToString(prefix = "id IN (", postfix = ")", separator = ",") { "?" } db.delete("table_name", placeholders, idsToDelete.map { it.toString() }.toTypedArray())
问题2:删除后如何更新UI?
解答:
notifyDataSetChanged()
(若使用RecyclerView
/ListView
)。 LiveData
,UI组件观察数据变化自动刷新。