【问题标题】:Android SQLite database exceptionAndroid SQLite 数据库异常
【发布时间】:2014-04-16 18:06:57
【问题描述】:

目前在我的 android 中的 SQLite 数据库中存在问题,当我尝试运行比较时,我收到以下错误: 引起:android.database.sqlite.SQLiteException:靠近“@hotmail”:语法错误:,编译时:SELECT DISTINCT _id,userName,password FROM userTable WHERE userName=djdss@hotmail.comAND password=shshsh

我的搜索是:

public boolean getUserNameAndPassword(String userName, String Password) throws SQLException {

    Cursor mCursor =
            db.query(true, TABLE_NAME, new String[] {KEY_ROWID,USER,
                    PWD},USER + "=" + userName + "AND password=" + Password, null,
                    null, null, null, null);

    if (mCursor.getCount() > 0)
    {
        return true;
    }
    return false;}

我尝试运行它是:

  boolean signIn = dbHelper.getUserNameAndPassword(mEmail, mPassword);
        if (signIn){
            Toast.makeText(getBaseContext(),"Sign in successful",Toast.LENGTH_LONG).show();
        }else {Toast.makeText(getBaseContext(),"Sign in failed",Toast.LENGTH_LONG).show();}

提前致谢!

【问题讨论】:

  • 这正是你应该使用selectionArgs?的原因。

标签: android sql eclipse sqlite


【解决方案1】:

您应该使用参数化查询,而不是仅仅附加用户名和密码变量,请参见下面的示例:

Cursor mCursor =
        db.query(true, TABLE_NAME, new String[] {KEY_ROWID,USER,
                PWD},USER + " = ? AND password = ?", new String[]{ userName, Password },
                null, null, null, null);

if (mCursor.getCount() > 0)
{
    return true;
}
return false;}

【讨论】:

  • 您还应该从查询中删除附加的密码 :)
  • 嗨,约翰,感谢您的及时回复,我已更改为您所说的内容,但我仍然收到: 引起:android.database.sqlite.SQLiteException:靠近“示例”:语法错误: , 编译时:SELECT DISTINCT _id, userName, password FROM userTable WHERE userName = ? AND 密码 = ?example
  • 我没有看到“示例”一词在查询中的位置。
  • 它是两个文本输入字段的一部分,一旦输入,点击登录按钮就会触发它们。 mEmail = mEmailView.getText().toString(); mPassword = mPasswordView.getText().toString();
  • @NiekHaarman 很好,我认为复制和粘贴故障:) 立即尝试。
【解决方案2】:

SELECT DISTINCT _id, userName, password FROM userTable WHERE userName=djdss@hotmail.comAND password=shshsh

您忘记了userNameAND 之间的空格。

此外,请查看 John 对参数化查询的回答。

【讨论】:

    【解决方案3】:

    试试这个:

    Cursor mCursor =
                db.query(true, TABLE_NAME, new String[] {KEY_ROWID,USER,
                        PWD},USER+"='"+userName+"' AND password='"+Password+"'", null,
                        null, null, null, null);
    

    【讨论】:

      【解决方案4】:

      你忘记了一个空格,现在试试:

      Cursor mCursor =
                  db.query(true, TABLE_NAME, new String[] {KEY_ROWID,USER,
                          PWD},USER + "='" + userName + "' AND password='" + Password + "'", null,
                          null, null, null, null);
      
          if (mCursor.getCount() > 0)
          {
              return true;
          }
          return false;}
      

      编辑:另外,您应该考虑按照 John 的建议使用参数化查询。

      【讨论】:

      • 您好,使用您的解决方案,我收到以下错误: 原因:android.database.sqlite.SQLiteException: near "@hdjsj": syntax error: ,编译时:SELECT DISTINCT _id, userName,密码来自 userTable WHERE userName=djsjsjs@hdjsj.com AND password=sjsjsj
      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 2016-06-22
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多