Что вызывает ошибки в следующем коде Java - PullRequest
0 голосов
/ 16 апреля 2019

Я реализовал метод для проверки пользователя по БД SQLite, но программа продолжает выдавать ошибку при нажатии кнопки входа в систему, коды ошибок следуют

2019-04-15 21: 38: 27.455 4601-4601 / com.example.mymedicare E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная Процесс: com.example.mymedicare, PID: 4601 android.database.sqlite.SQLiteException: такого столбца нет: Brad (код 1): при компиляции: SELECT * FROM users WHERE Brad =? А ТАКЖЕ Brad1994 =? на android.database.sqlite.SQLiteConnection.nativePrepareStatement (Native Метод) на android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:889) на android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:500) на android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) на android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:58) на android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) на android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:44) в android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1318) на android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1257) на com.example.mymedicare.MyDBHelper.checkLogin (MyDBHelper.java:96)

Я попытался прочитать журнал ошибок, но не могу найти серьезных ошибок, мои методы будут показаны ниже

  // This is my check login method in mydbhelper   

   public boolean checkLogin(String username, String password) {
    SQLiteDatabase db = this.getWritableDatabase();

    String s;
    Cursor c = db.rawQuery("SELECT * FROM users WHERE " + username + " =? AND " + password + " =?", null);

    if (c.getCount() <= 0) {
        c.close();
        db.close();
        return false;
    } else {
        c.close();
        db.close();
        return true;
    }
}


   //This is LoggingIn activity where I have tried to implement the above 
   method 

   public class LoggingIn extends AppCompatActivity {

//defines page objects
private Button SignIn;
private EditText Usernames;
private EditText Passwords;
private MyDBHelper db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_logging_in);

    //Finds objects by ID
     //edit text to string
    Usernames = (EditText) findViewById(R.id.Usernames);

    Passwords = (EditText) findViewById(R.id.Passwords);


    Button SignIn = (Button) findViewById(R.id.SignIn);
    db = new MyDBHelper(this);

    SignIn.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            Boolean validUser = 
     db.checkLogin(Usernames.getText().toString(), 
     Passwords.getText().toString());

            if (validUser == true) {
                Intent i = new Intent(getApplicationContext(), 
                HomePage.class);
                startActivity(i);
            } else {
                Toast.makeText(getApplicationContext(), "Invalid login", 
                Toast.LENGTH_SHORT).show();
            }

        }
    });
}
}

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Вы передаете параметры username и password в качестве имен столбцов.Правильный путь:

Cursor c = db.rawQuery(
    "SELECT * FROM users WHERE usenamecolumn = ? AND passwordcolumn = ?", 
     new String[] {username, password});

Измените usenamecolumn и passwordcolumn на имена столбцов вашей таблицы для имени пользователя и пароля.

0 голосов
/ 16 апреля 2019

Возможно, вы хотите что-то ближе к этому:

    db.rawQuery("SELECT * FROM users WHERE username = ? AND password = ?", null);

В том виде, как вы написали это выше, вы пытаетесь выполнить запрос, используя критерии поиска (значение) в качестве имени столбца (ключ).).

Например, на простом английском языке в первой части вашего исходного утверждения написано «найти что-то в столбце Брэда», поэтому ваше исключение появляется с «SQLiteException: нет такого столбца: Брэд»

Чтовы на самом деле хотели сказать: «найдите Брэда в столбце имени пользователя», и именно это должно сделать для вас пересмотренное утверждение, которое я добавил выше (оно не проверено, но на правильном пути, чтобы вы могли двигаться дальше).

Iнашел этот другой пост StackOverflow, который также может помочь в создании подготовленных операторов -> Как использовать подготовленные операторы в SQlite в Android?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...