从 SQLite 数据库中删除所有已完成的项目

Posted

技术标签:

【中文标题】从 SQLite 数据库中删除所有已完成的项目【英文标题】:Deleting all done items from a SQLite databse 【发布时间】:2021-09-06 04:24:28 【问题描述】:

我需要从待办事项列表数据库中删除已完成的项目 (IS_ACTIVE = 1),但我的代码只是清除了数据库。我的错误是什么? Database example

    private val todoTable = "TODO_TABLE"
    private val isActive = "IS_ACTIVE"

    fun deleteDone()
        val db = this.writableDatabase
        val sqlSelectQuery = "SELECT * FROM $todoTable"
        val cursor = db.rawQuery(sqlSelectQuery, null)
        if(cursor.moveToFirst())
            do 
                val sqlDeleteQuery = "DELETE FROM $todoTable WHERE $isActive = $cursor.getInt(2) = 1"
                db.execSQL(sqlDeleteQuery)
            while(cursor.moveToNext())
        
        db.close()
    

【问题讨论】:

【参考方案1】:

无需选择带有IS_ACTIVE = 1 的行,然后循环将它们一一删除。 使用delete()方法将其全部删除:

fun deleteDone()
    val db = this.writableDatabase
    db.delete(todoTable, isActive + " = 1", null)
    db.close()

这里delete()的第二个参数是WHERE子句,sql语句会被解释为:

DELETE FROM TODO_TABLE WHERE IS_ACTIVE = 1

或者更简单:

fun deleteDone()
    val db = this.writableDatabase
    db.delete(todoTable, isActive, null)
    db.close()

因为:

WHERE IS_ACTIVE

相当于:

WHERE IS_ACTIVE = 1

【讨论】:

【参考方案2】:

试试下面的查询。

 if(cursor.getInt(2)==1)
 val sqlDeleteQuery = "DELETE FROM $todoTable WHERE $isActive = $cursor.getInt(2)" 
 db.execSQL(sqlDeleteQuery)

【讨论】:

以上是关于从 SQLite 数据库中删除所有已完成的项目的主要内容,如果未能解决你的问题,请参考以下文章

从 ListView(SQLite 数据库)中长按行删除

如何从GridView项目中删除SQLite数据?

如何从 recyclerview 和 sqlite 中删除项目? [复制]

已验证的现有列上的 SQLite 数据库“没有此类列”错误

如何以编程方式从 Android 中删除 SQLite 数据库

SQLIte Transaction