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

如何删除类实例?解决SQLite删除Check类实例时的异常问题

解决SQLite删除数据时的unrecognized token异常

这个问题我太熟了!你看报错信息里的SQL语句:DELETE FROM crimes WHERE uuid = 8565f9b5-5968-4e11-8d55-b7dcfd676023,这里的UUID是字符串类型,但你没给它加单引号,SQLite会把它当成一系列标识符和减号运算,自然就识别不了8565f9b5这个token了。

给你几个靠谱的解决办法:

  • 方法一:给UUID值加上单引号
    直接修改SQL语句,把UUID用单引号包裹起来,比如:

    DELETE FROM crimes WHERE uuid = '8565f9b5-5968-4e11-8d55-b7dcfd676023'
    

    不过要注意,如果UUID是用户输入的动态内容,这种直接拼字符串的方式有SQL注入风险,不推荐在生产代码里这么用。

  • 方法二:使用参数化查询(强烈推荐)
    这是Android操作SQLite最安全规范的方式,既能避免SQL注入,还不用手动处理引号问题。示例代码大概是这样的:

    SQLiteDatabase db = yourDbHelper.getWritableDatabase();
    String targetUuid = "8565f9b5-5968-4e11-8d55-b7dcfd676023";
    // 用占位符?代替具体值,通过selectionArgs传入参数
    db.delete("crimes", "uuid = ?", new String[]{targetUuid});
    db.close();
    

    这里delete方法的第三个参数会自动帮你处理字符串的引号包裹,完美避开你遇到的错误。

  • 额外提醒
    如果你是通过ContentProvider操作数据库,同样要使用参数化方式传递UUID,比如在delete方法里利用selectionArgs参数传递值,原理和上面一致。

补充说明:SQLite中字符串类型的值必须用单引号(双引号也可,但单引号是标准写法)包裹,只有数字类型的值才不需要加引号。UUID属于字符串,所以必须加引号才能被正确识别。

内容的提问来源于stack exchange,提问作者no-name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:18