Android SQLite rawQuery校验账号密码时WHERE子句语法错误如何解决
核心语法错误
- 重复使用WHERE关键字:SQL语法规定一条SELECT语句只能有一个WHERE子句,多个过滤条件需要用
AND或者OR逻辑运算符拼接,不能连续写两个WHERE。你拼接后的实际执行语句为SELECT * FROM Employee WHERE EMPLOYEE_EMAIL = 12 WHERE EMPLOYEE_PASSWORD=1234,两个WHERE连用直接触发语法报错。 - 字符串参数缺少单引号包裹:邮箱和密码都是字符串类型的值,直接拼接进SQL语句时需要用单引号把值括起来,否则SQLite会把输入的内容识别为字段名,后续也会触发语法错误。
- 安全风险:直接拼接用户输入构造SQL语句存在严重的SQL注入风险,用户可以构造特殊输入绕过验证甚至篡改数据库数据,禁止在生产环境使用这种写法。
正确写法示例
// 使用参数化查询(?作为占位符),自动处理参数格式、规避注入风险 String queryEmail = "SELECT * FROM " + TABLE_NAME + " WHERE " + col_2 + " = ? AND " + col_3 + " = ?"; Cursor cr = db.rawQuery(queryEmail, new String[]{email, password}); return cr.moveToFirst();
内容的提问来源于stack exchange,提问作者sania hussain
相关产品推荐
相关产品推荐

