-1

データベースに保存されている値を使用してアプリケーションにログインする前に、ユーザー名とパスワードを検証しようとしています。

これが私のデータベースメソッドです。

public boolean GetData2(String uname, String pass) {
    boolean result;
    Cursor c1 = null;
    String query = "SELECT * FROM " + TABLE_MIS2 + "";
    SQLiteDatabase dbc = this.getReadableDatabase();
    c1 = dbc.rawQuery(query, null);
    String u = c1.getString(c1.getColumnIndex(DatabaseHandler.KEY_USERID));
    String p = c1.getString(c1.getColumnIndex(DatabaseHandler.KEY_PWD));

    if ((uname.equals(u))&&(pass.equals(p))) {
        result = true;

    } else {
        result = false;
    }

    return result;

これが私のチェックする条件です。

boolean res = dbh.GetData2(s1, s2);
if(res == true) {
    Intent in=new Intent(MainActivity.this,LoginActivity.class);
    startActivity(in);                      
} 
else {                  
    Toast.makeText(MainActivity.this, "Login failed", Toast.LENGTH_SHORT).show();
}
4

1 に答える 1

0

いくつかのこと...まず、c1.moveToFirst() を呼び出していません。第 2 に、ユーザーが 1 人しかいない場合を除いて、返された最初のレコードのみを調べようとしているため、探している結果が得られない可能性が高くなります。

より良いものは次のとおりです。

public boolean GetData2(String uname, String pass)
{
    SQLiteDatabase dbc = this.getReadableDatabase();
    Cursor c1 =  dbc.query(
            TABLE_MIS2,
            null,
            DatabaseHandler.KEY_USERID  + "=? AND " + DatabaseHandler.KEY_PWD + "=?",
            new String[] { uname, pass },
            null,
            null,
            null);
    return (c1.getCount() >= 1);
}
于 2013-09-24T14:08:42.580 に答える