Android中如何正确拼接带变量的原生SQL查询并修复语法错误
修复Android SQLite原生查询的语法错误
你这段代码的问题很明确:LIMIT 5没有被包含在字符串拼接的范围内,在Java语法里会被识别成无效的标识符,同时SQL语句末尾的分号也完全没必要加——rawQuery方法会自动处理语句的执行边界。
修复后的代码如下:
Cursor cursor = mDB.rawQuery("SELECT * FROM " + dbn + " LIMIT 5", null);
额外的安全与兼容性提示
如果你的表名dbn有可能是SQL关键字,或者是来自用户输入的内容,建议用反引号把表名包裹起来,避免语法冲突:
Cursor cursor = mDB.rawQuery("SELECT * FROM `" + dbn + "` LIMIT 5", null);
不过要注意:这种字符串拼接方式如果表名是用户可控的,会存在SQL注入风险,所以尽量使用自己预先定义的安全表名,不要直接将用户输入作为表名来拼接哦。
内容的提问来源于stack exchange,提问作者iamal
相关产品推荐
相关产品推荐

