如何删除类实例?解决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
相关产品推荐
相关产品推荐

