Как решить проблему с входом в базу данных? - PullRequest
2 голосов
/ 12 января 2020

Я новичок, и я хочу спросить о проблеме, с которой я столкнулся в своем приложении. Я пытаюсь войти с данными, которые я поместил в базу данных, но она ничего не распознает. Вот код файла DatabaseHelper Java. Я думаю, что проблема с моей checkData_pseudo_pass функцией. Заранее благодарим за ответ!

DatabaseHelper. java

package com.example.tp5;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "database.db";
    public static final String TABLE_NAME = "tp4_table";
    /*
    public static final String COL_1 = "ID";
    public static final String COL_2 = "NOM";
    public static final String COL_3 = "PRENOM";
    public static final String COL_4 = "PSEUDO";
    public static final String COL_5 = "PASS";
    */

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NOM TEXT,PRENOM TEXT,PSEUDO TEXT,PASS TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }

    public boolean InsererData(String nom, String prenom, String pseudo, String pass){
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("nom",nom);
        contentValues.put("prenom",prenom);
        contentValues.put("pseudo", pseudo);
        contentValues.put("pseudo", pass);
        long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
    /*
    public boolean insertData(String nom, String prenom, String pseudo, String pass) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2,nom);
        contentValues.put(COL_3,prenom);
        contentValues.put(COL_4,pseudo);
        contentValues.put(COL_5,pass);

        long result = db.insert(TABLE_NAME,null ,contentValues);
        if(result == -1)
            return false;
        else
            return true;
    }
    */

    public Cursor getAllData() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
        return res;
    }
    /*
    public Boolean checkData_Pass(String pass){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res_pass = db.rawQuery("select * from tp4_table where PASS=? ",new String[]{pass});
        if(res_pass.getCount()>0) return false;
        else {
            return true;
        }
    }
    */

    public Boolean checkData_pseudo_pass(String pseudo, String pass){
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res_unique = db.rawQuery("select * from tp4_table where PSEUDO=? and PASS=?", new String[]{pseudo, pass});
        if(res_unique.getCount()>0) return false;
        else {
            return true;
        }
    }

}

MainActivity3. java

package com.example.tp5;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity3 extends AppCompatActivity{

    DatabaseHelper myDb_connexion; // création de l'objet mydb de type DatabaseHelper

    private Button valider_connexion2 = null;
    private EditText pseudo_connexion = null;
    private EditText pass_connexion = null;

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

        myDb_connexion = new DatabaseHelper(this);

        valider_connexion2  = findViewById(R.id.button3);
        pseudo_connexion =  findViewById(R.id.edit_pseudo_connexion);
        pass_connexion = findViewById(R.id.edit_pass_connexion);

        //EditText textView_pseudo = (EditText) findViewById(R.id.edit_pseudo_connexion);
        //EditText textView_pass = (EditText) findViewById(R.id.edit_pass_connexion);

        valider_connexion2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String _str_pseudo = pseudo_connexion.getText().toString().trim();
                String _str_pass = pass_connexion.getText().toString().trim();

                Intent intent3 = new Intent(MainActivity3.this, MainActivity4.class);
                Boolean check_Pseudo_Pass = myDb_connexion.checkData_pseudo_pass(_str_pseudo, _str_pass);
                //Si Check_Pseudo_Pass affiche le pseudo et le pass
                //if (check_Pseudo_Pass == true && !str_pseudo.equals("") && !str_pass.equals(""))
                if (check_Pseudo_Pass == true)
                {
                    intent3.putExtra("pseudo", _str_pseudo);
                    intent3.putExtra("pass", _str_pass);
                    startActivity(intent3);

                    Toast.makeText(MainActivity3.this,"Connexion réussie !",Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(MainActivity3.this,"Connexion raté !",Toast.LENGTH_SHORT).show();
                }

                // Question 7:Connexion unique Login="Admin",pass="root" et Extra enregistre le pseudo et le mot de passe pour le récupérer à la pas MainActivité
                /*
                Intent intent3 = new Intent(MainActivity3.this, MainActivity4.class);
                // if (!str_pseudo.equals("") && !str_pass.equals("") ) {
                if (str_pseudo.equals("Admin") && str_pass.equals("root") ) {
                    intent3.putExtra("pseudo", str_pseudo);
                    intent3.putExtra("pass", str_pass);
                    Toast.makeText(MainActivity3.this,"Connexion réussie !",Toast.LENGTH_SHORT).show();
                    startActivity(intent3);
                }else{
                    Toast.makeText(MainActivity3.this,"Connexion raté !",Toast.LENGTH_SHORT).show();
                }
                */
            }
        });
    }
}

1 Ответ

0 голосов
/ 12 января 2020

Рассмотрим этот метод:

public Boolean checkData_pseudo_pass(String pseudo, String pass){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res_unique = 
        db.rawQuery("select * from tp4_table where PSEUDO=? and PASS=?", 
                    new String[]{pseudo, pass});
    if (res_unique.getCount() > 0) {
         return false;
    } else {
        return true;
    }
}

Возвращает false, если какая-либо из строк в tp4_table соответствует данным pseudo, pass и true в противном случае.

Другими словами, завершается неудачно , если имя пользователя и пароль правильные .

Лог c теста задом наперед. Это должно быть:

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

или, что еще лучше, просто так:

    return res_unique.getCount() > 0;

Если после этого изменения у вас все еще остается проблема, то это где-то еще в коде. Например, вы, возможно, неправильно заполнили базу данных.


И вы должны вернуть boolean, а не Boolean.

И вы должны исправить многочисленные ошибки стиля в вашем коде , начиная с многих случаев идентификаторов, которые не соответствуют правилам стиля:

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