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

SQLite DELETE代码在DatabaseHandler中失效,生成的SQL语句却可执行

问题原因及解决方案

核心问题:你用了rawQuery()方法执行DELETE语句,但这个方法只适用于查询操作(比如SELECT),不会执行INSERT/UPDATE/DELETE这类修改数据的语句。直接在SQL环境里能生效是因为环境会直接执行修改指令,但Android的rawQuery()只是创建查询游标,不会主动执行修改逻辑。

解决方案1:改用execSQL()执行原生SQL

execSQL()是专门用来执行非查询类SQL语句的方法,替换后就能正常执行DELETE操作。同时建议用参数占位符代替字符串拼接,避免SQL注入风险,也能避免参数含特殊字符导致的语法错误:

db!!.execSQL(
    "DELETE FROM $Cards_TABLE WHERE $Card_Parent_Board_Id=? AND $Card_Parent_Swimlane_Id=? AND $Card_Parent_List_Id=?",
    arrayOf(CardParnt_boardId, CardParnt_SwimlaneId, CardParnt_ListId)
)

解决方案2:使用Android封装的delete()方法

Android提供了更安全的delete()方法,无需手写完整SQL语句,可读性和安全性更高:

val whereClause = "$Card_Parent_Board_Id=? AND $Card_Parent_Swimlane_Id=? AND $Card_Parent_List_Id=?"
val whereArgs = arrayOf(CardParnt_boardId, CardParnt_SwimlaneId, CardParnt_ListId)
db!!.delete(Cards_TABLE, whereClause, whereArgs)

额外提醒

  • 避免直接拼接参数到SQL语句中,比如你原来的'$CardParnt_boardId'写法,如果参数包含单引号、反斜杠等特殊字符,会直接导致SQL语法错误。
  • 执行修改操作后,可以通过查询对应表的行数来确认数据是否被正确删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:02:18