【问题标题】:Deleting all done items from a SQLite databse从 SQLite 数据库中删除所有已完成的项目
【发布时间】: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()
    }

【问题讨论】:

    标签: android database sqlite kotlin android-sqlite


    【解决方案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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多