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

