Как вывести определённые данные по primary key из SQlite? (Android)

Пишу небольшое регистрация\вход приложение которое сохраняет данные пользователя при регистрации и используя их в следствии можно войти в определенный аккаунт.

Метод для внесения данных в БД:


      public Boolean insertData(String email, String password, String name, String lastName, String gender, String dateOfBirthday) {
        SQLiteDatabase DB = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("email", email);
        contentValues.put("password", password);
        contentValues.put("name", name);
        contentValues.put("lastName", lastName);
        contentValues.put("gender", gender);
        contentValues.put("dateOfBirthday", dateOfBirthday);

        long result = DB.insert("UserData", null, contentValues);
        if (result == -1) return false;
        else return true;


    }

Метод onCreate БД:

    public void onCreate(SQLiteDatabase DB) {
        DB.execSQL("create Table  UserData (email TEXT primary key, password TEXT, name TEXT, lastName TEXT, gender TEXT, dateOfBirthday TEXT) ");

    } 

Метод для обращения к БД и получения объекта Cursor c данными:

        SQLiteDatabase DB = this.getWritableDatabase();
        try {
            Cursor cursor = DB.rawQuery("Select * from UserData " + " where email = " + userKeyEmail, null);
        return cursor;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

Метод для обработки и получения данных (не работает):

        Cursor cursor = DB.getDataCursor(userEmailKey);
        if (cursor != null) {
            int idUserName = cursor.getColumnIndex("name");
            int idUserLastName = cursor.getColumnIndex("lastName");
            int idUserGender = cursor.getColumnIndex("gender");
            int idUserBirthday = cursor.getColumnIndex("dateOfBirthday");

            userName = cursor.getString(idUserName);
            userLastName = cursor.getString(idUserLastName);
            userGender = cursor.getString(idUserGender);
            userDateOfBirthday = cursor.getString(idUserBirthday);



            nameAndLastName.setText(userName + " " + userLastName);
            gender.setText(userGender);
            dateOfBirthday.setText(userDateOfBirthday);


        } else {
            Toast.makeText(MainActivity4.this, "Ошибка! Данные отсутствуют!", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(MainActivity4.this, MainActivity.class);
            startActivity(intent);
        }
    }

Ошибка: E/SQLiteLog: (1) no such column: a Хотя строка с столбец с такими данными присутствует.

Вопрос: каким способом можно вывести данные из определенной строки по столбцу email? Например в метод для получения определенных данных передается email пользователя, и по нему уже выводятся остальные данные (имя, фамилия, и т.д).

P.S поле email это primary key.

Заранее спасибо!


Ответы (1 шт):

Автор решения: FatherOfFiveChildren

сейчас вы пытаетесь проверить значение поля "email" с значением поля "а".

Поля "а" нет в вашей таблице. Об этом и пишет ошибка.

следует поставить кавычки для проверки строки.

Cursor cursor = DB.rawQuery("Select * from UserData " + " where email = " + userKeyEmail, null);

поменять на

Cursor cursor = DB.rawQuery("Select * from UserData " + " where email ='" + userKeyEmail + "'", null);
→ Ссылка