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

Android中SQLite rawQuery()语法错误排查:登录验证功能异常

问题原因及解决方案

先看Logcat里输出的错误SQL语句:

SELECT * FROM registrationWHERE Email=? AND Password=?

一眼就能发现问题:你的表名registration和WHERE关键字直接连在一起了!SQLite解析时会把registrationWHERE当成一个不存在的表名,后面紧跟着=符号,自然就触发了syntax error near "="的语法错误。

错误根源

在checkusercredentials方法拼接SQL字符串时,TABLE_NAME和where之间少了一个空格:

c=db.rawQuery("select * from "+TABLE_NAME+"where " + "Email=? and Password=?",new String[]{email,password});

这段代码里的"+TABLE_NAME+"where "会被拼接成registrationwhere,没有空格分隔表名和WHERE子句,直接破坏了SQL的语法结构。

修复后的代码

只需要在TABLE_NAME和where之间补上一个空格即可:

public int checkusercredentials(String email,String password){
    Log.i("INISDE","CHECK USER ");
    SQLiteDatabase db=this.getWritableDatabase();
    try{
        int i=0;
        Cursor c=null;
        // 给TABLE_NAME和where之间添加空格
        c=db.rawQuery("select * from "+TABLE_NAME+" where Email=? and Password=?",new String[]{email,password});
        c.moveToNext();
        i=c.getCount();
        c.close();
        return i;
    }catch(Exception e) {
        e.printStackTrace();
    }
    return 0;
}

额外优化建议

  • 处理Cursor前最好先判断c != null,避免空指针异常;
  • 因为用户邮箱应该是唯一的,用c.moveToFirst()代替moveToNext()逻辑会更清晰;
  • 建议在创建表时给Email字段加上UNIQUE约束,防止重复注册同一邮箱,让查询结果更可靠。

内容的提问来源于stack exchange,提问作者WALEED AHMED

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:19