“@gmail”附近的语法错误

Posted

技术标签:

【中文标题】“@gmail”附近的语法错误【英文标题】:near "@gmail" Syntax error 【发布时间】:2015-01-23 05:07:50 【问题描述】:

我正在使用布尔函数创建登录活动,但在将电子邮件地址与数据库中的电子邮件地址匹配时出错,但出现错误。

这是我的dbHandler 类方法:

 public Boolean loginCheck(String email,String password)

    Boolean flag=false;
    String selectQuery = "SELECT  * FROM " + TABLE_NAME + " WHERE email=" + email +" AND pass="+password;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if(cursor.getCount() == 1)
      flag=true;
    
    else
    
      flag=false;
    

    return flag;

这是java文件代码

login.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 
            // TODO Auto-generated method stub
            String emailValue=edtEmail.getText().toString();//this is EditText
            String passValue=edtPass.getText().toString();

            if(db.loginCheck(emailValue, passValue))
            
                Intent in = new Intent(getApplicationContext(), Home.class);
                startActivity(in);
                Toast.makeText(getApplicationContext(), "Login Successful", 2000).show();
            
            else
            
                Toast.makeText(getApplicationContext(), "Username and Password not match", 5000).show();
            
        
    );

得到错误

 01-23 04:58:30.519: E/androidRuntime(2422):                                                     android.database.sqlite.SQLiteException: near "@gmail": syntax error (code  1): , while compiling: SELECT  * FROM login WHERE email=***@gmail.com AND pass=***
 01-23 04:58:30.519: E/AndroidRuntime(2422):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
  01-23 04:58:30.519: E/AndroidRuntime(2422):   at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)

请提供解决方案

【问题讨论】:

你需要转义你的参数。使用query 代替rawQuery 并传递email 参数。 【参考方案1】:

问题是你没有用单引号传递字符串。

最好将rawQuery 与参数的字符串数组一起使用:

Cursor cursor = db.rawQuery(
        "select * from "+TABLE_NAME +" where email = ? and pass = ? ", new String[]email, password);

希望这会有所帮助。

【讨论】:

【参考方案2】:

您需要将您的@gmail 放在引号中 - "/'gmail/'"

tring selectQuery = "SELECT  * FROM " + TABLE_NAME + " WHERE email=\'"
+ email+"\'" +" AND pass=\'"+password+"\'";

您需要将字符串放在引号中。

【讨论】:

以上是关于“@gmail”附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

第 1 行的 ''')' 附近的 SQL 语法有错误

存储过程出现错误.关键字'ORDER'附近有语法错误.')'附近有语法错误.

错误 1064 (42000) : 使用 %s 附近的 SQL 语法有错误

错误“关键字 'CONVERT' 附近的语法不正确”

第 14 行 '' 附近的 SQL 语法错误

-e 第 1 行,“'755']”附近的 nmake 语法错误