Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Sqlite语法错误“新建”;"富",;_Android_Sqlite_Login_Syntax Error - Fatal编程技术网

Android Sqlite语法错误“新建”;"富",;

Android Sqlite语法错误“新建”;"富",;,android,sqlite,login,syntax-error,Android,Sqlite,Login,Syntax Error,我已经检查了stackoverflow,但是我仍然没有找到一个适合我的答案。我试图通过sqlite创建一个用户登录,我一直从logcat中得到这个错误 03-11 16:19:57.767:E/com.asmaushaheedah.database.DatabaseHelper(25118):从电子邮件和密码=?foo@example.com你好 03-11 16:19:57.767:E/SQLiteLog(25118):(1)靠近“foo”:语法错误 我的databasehelper类的一个片

我已经检查了stackoverflow,但是我仍然没有找到一个适合我的答案。我试图通过sqlite创建一个用户登录,我一直从logcat中得到这个错误

03-11 16:19:57.767:E/com.asmaushaheedah.database.DatabaseHelper(25118):从电子邮件和密码=?foo@example.com你好
03-11 16:19:57.767:E/SQLiteLog(25118):(1)靠近“foo”:语法错误

我的databasehelper类的一个片段是:

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String LOG = DatabaseHelper.class.getName();

private static final int DATABASE_VERSION = 1;


private static final String DATABASE_NAME = "projectManager";

// Table Names
private static final String TABLE_USER = "user";

private static final String KEY_ID = "id";

// USER Table - column nmaes
private static final String KEY_NAME = "name";
private static final String KEY_SURNAME = "surname";
private static final String KEY_DOB = "dob";
private static final String KEY_NICK = "nick";
private static final String KEY_EMAIL = "email";
private static final String KEY_PASSWORD = "password";


private static final String CREATE_TABLE_USER = "CREATE TABLE "
        + TABLE_USER + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME
        + " text," + KEY_SURNAME + " text," + KEY_DOB + " DATETIME,"
        + KEY_NICK + " text," + KEY_EMAIL + " text," + KEY_PASSWORD
        + " text" + ")";

 public User getUser(String email, String password) {
    SQLiteDatabase db = this.getReadableDatabase();


    String selectQuery = "SELECT id FROM " + TABLE_USER + " WHERE "
            + KEY_EMAIL + " & " + KEY_PASSWORD+ " =?" + email + password;

    Log.e(LOG, selectQuery);

    Cursor c = db.rawQuery(selectQuery, null);

    if (c != null)
        c.moveToFirst();

    User td = new User();
    td.setID(c.getInt(c.getColumnIndex(KEY_ID)));
    td.setName((c.getString(c.getColumnIndex(KEY_NAME))));
    td.setSurname(c.getString(c.getColumnIndex(KEY_SURNAME)));
    td.setDob((c.getString(c.getColumnIndex(KEY_DOB))));
    td.setNick(c.getString(c.getColumnIndex(KEY_NICK)));
    td.setEmail(c.getString(c.getColumnIndex(KEY_EMAIL)));
    td.setPassword(c.getString(c.getColumnIndex(KEY_PASSWORD)));
    return td;
}
我不确定使用sqlite进行用户登录是否是最好的选择,如果不是,有人能推荐一个更好的选择吗

替换此代码:

String selectQuery = "SELECT id FROM " + TABLE_USER + " WHERE "
            + KEY_EMAIL + " & " + KEY_PASSWORD+ " =?" + email + password;

Log.e(LOG, selectQuery);

Cursor c = db.rawQuery(selectQuery, null);
通过这个:

String[] columns = {KEY_ID};
String where = KEY_EMAIL+"=? AND " + KEY_PASSWORD + "=?";
String[] whereArgs = {email, password};
Cursor cursor = db.query(TABLE_USER, 
                columns, 
                where, whereArgs, null, null, null);

@user261588,SELECT是隐式的,带有方法查询。请提供完整的错误信息我在你的代码中的key_电子邮件和key_密码之间添加了一个“&”,我不再有那个错误了。谢谢