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

Android Studio 3.1中SQLite数据库版本更新报错:expected, got '?'

解决SQLite设置user_version时的"expected, got '?'"错误

哦,这个坑我之前踩过!你遇到的问题根源在于SQLite的PRAGMA语句并不支持参数占位符(?)——虽然普通的CRUD语句可以用?来绑定参数,但PRAGMA属于特殊的系统命令,SQLite解析器不允许在这里使用占位符,所以直接用db.execSQL("PRAGMA user_version = ?", ...)就会触发语法错误。

两种可行的解决方案:

  • 方案一:直接拼接合法的PRAGMA语句
    因为questionDbVersion是你自己控制的整数版本号,不存在SQL注入风险,所以可以直接把数值拼进SQL语句里:

    db.execSQL("PRAGMA user_version = " + questionDbVersion);
    

    这种方式和你在SQL环境中直接执行PRAGMA user_version =1的逻辑一致,能正常生效。

  • 方案二:使用Android提供的API方法(更推荐)
    Android的SQLiteDatabase类已经封装了设置数据库版本的方法,完全不用手动写PRAGMA语句:

    db.setVersion(questionDbVersion);
    

    这个方法内部会自动帮你处理user_version的更新,不仅更简洁,还能避免手动拼接字符串可能带来的潜在问题,是官方推荐的做法。

你可以试试上面任意一种方法,应该就能解决这个语法错误啦!

内容的提问来源于stack exchange,提问作者Jack Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:34