Как сравнить строки с данными из sqlite

Я работаю над проектом, в котором необходимо сравнить строки (идентификатор пользователя и пароль), которые я получаю от Bluetooth, сохранить их в sqlite, а затем сравнить их со строками, которые я получаю из editTexts (идентификатор пользователя и пароль). Я могу читать ввод с bluetooth и сохранять его в sqlite, но я не знаю, как сравнить его с данными, которые я получаю от editTexts. можешь мне помочь?

вот действие mydBHelper:

public class myDbAdapter {

myDbHelper myhelper;
public myDbAdapter(Context context)
{
    myhelper = new myDbHelper(context);
}


public long insertData(String userid, String pass)
{
    SQLiteDatabase dbb = myhelper.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(myDbHelper.UID, userid);
    contentValues.put(myDbHelper.MyPASSWORD, pass);
    long id = dbb.insert(myDbHelper.TABLE_NAME, null , contentValues);
    return id;
}



static class myDbHelper extends SQLiteOpenHelper
{
    private static final String DATABASE_NAME = "myDatabase";    // Database Name
    private static final String TABLE_NAME = "myTable";   // Table Name
    private static final int DATABASE_Version = 1;    // Database Version
    private static final String UID = "_id";     // Column I (Primary Key)
    private static final String MyPASSWORD= "Password";    // Column III
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+
            " ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT ,"+ MyPASSWORD+" VARCHAR(225));";
    private static final String DROP_TABLE  = "DROP TABLE IF EXISTS "+TABLE_NAME;
    private Context context;

    public myDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_Version);
        this.context=context;
    }


    public void onCreate(SQLiteDatabase db) {

        try {
            db.execSQL(CREATE_TABLE);
        } catch (Exception e) {
            Message.message(context,""+e);
        }
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        try {
            Message.message(context,"OnUpgrade");
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }catch (Exception e) {
            Message.message(context,""+e);
        }
    }
}

}

полученная строка была вставлена ​​в действие FromServer:

public class FromServer extends AppCompatActivity {
myDbAdapter helper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_from_server);
    //Userid_txt= (EditText) findViewById(R.id.editUserID);
    //Pass_txt= (EditText) findViewById(R.id.editPass);
    helper = new myDbAdapter(this);

}

//insert string from bluetooth
public void insertData() {
    //----------------passed string from bluetooth
    Intent intent = getIntent();
    String message = intent.getExtras().getString("moved");
    try {
        JSONObject obj = new JSONObject(message);

        String t1 = obj.getString("user_id");
        String t2 = obj.getString("password");
        if (t1.isEmpty() || t2.isEmpty()) {
            Message.message(getApplicationContext(), "User ID and Password empty");
        }

        long id = helper.insertData(t1, t2);
        if (id >= 0) {

            Message.message(getApplicationContext(), "Insertion success");

        } else {
            Message.message(getApplicationContext(), "Insertion to database failed");

        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

}

Затем в Main Activity я создаю userid.getText и password.getText, которые будут сравниваться с моими данными из sqlite. Я новичок в sqlite, пожалуйста, помогите мне.

1
0
58
1

Ответы 1

Следующий метод в классе myDbAdapter вернет true, если есть совпадающие данные, или false в противном случае.

public boolean compareData(String userid, String pass)
{
    boolean rv = false;
    SQLiteDatabase dbb = myhelper.getWritableDatabase();
    String whereclause = myDbHelper.UID + "=? AND " + myDbHelper.MyPASSWORD + "=?";
    String[] whereargs = new String[]{userid,pass};
    Cursor csr = dbb.query(myDbHelper.TABLE_NAME,null,whereclause,whereargs,null,null,null);
    if (csr.getCount() > 0) {
        rv = true;
    }
    csr.close();
    return rv;
}
  • Это запрашивает таблицу, используя SELECT * FROM your_table WHERE _id = '????' И Пароль = '????';
  • Результат запроса возвращается в виде курсора.
  • Проверяется счетчик курсора (количество возвращенных строк), если он больше 0 (должен быть только 0 или 1 из-за _id), данные совпадают, в противном случае строки не найдены (счетчик 0).
  • Курсор закрывается и возвращается либо false, либо true (последнее, если совпадают оба столбца).

Вы можете вызвать это, используя что-то вроде: -

if (helper.compareData(Userid_txt.getText().toString(),Pass_txt.getText().toString()) {
    .... handle data compares
} else {
    .... handle data does not compare
}

Вы, вероятно, захотите создать переменные класса Userid_txt и Pass_Txt, а также иметь средства для вызова вышеуказанного после ввода данных (возможно, кнопки). Итак, если предположить, что у вас есть кнопка, у вас может быть что-то вроде: -

public class FromServer extends AppCompatActivity {
    myDbAdapter helper;
    EditText Userid_txt, Pass_txt;
    Button doCompare; 


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_from_server);
        Userid_txt= (EditText) findViewById(R.id.editUserID);
        Pass_txt= (EditText) findViewById(R.id.editPass);
        doCompare = (Button) findViewById(R.id.your_button);
        helper = new myDbAdapter(this);

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

helper.compareData(Userid_txt.getText().toString(),Pass_txt.getText().toString()) {
                    //.... handle data compared
                } else {
                    //.... handle data doesn't compare
                }
            }
        });    
    }
    ......
  • Обратите внимание, что приведенный выше код является принципиальным и не тестировался, поэтому может содержать некоторые ошибки.

Другие вопросы по теме