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

