2016-04-02 2 views
2

私はアンドロイドアプリを開発しています。アンドロイドアプリでは、ユーザーが登録目的で名前、姓、メールアドレス、パスワードを入力します。この入力プロセスは完璧に機能しています。ユーザーがメールを入力するたびに、入力したメールがデータベースに既に存在するかどうかを確認する必要があります。このためデータベースに挿入するたびにデータフィールド(Eメールなど)の一意性を見つける方法は?

私は私のDBHelperクラスに以下の方法を試みた。ここTABLE_NAMEを

public String Exist(String user) { 
    String username=""; 
    SQLiteDatabase db = this.getReadableDatabase(); 

    try { 
     Cursor c = db.query(TABLE_NAME, null, "COL_4" + "=?", new String[]{String.valueOf(user)},null, null, null); 

     if (c == null) { 
      return username; 
     } 
     else { 
      c.moveToFirst(); 
      username = c.getString(c.getColumnIndex("COL_4")); 
     } 
    } 

    catch(Exception e){ 

    } 

    return username; 
} 

を私のテーブルの名前で、COL_4は、ユーザーの電子メールを含む列であると私は入力した文字列を渡していますこのメソッドのパラメータとしてユーザによって入力された電子メール(電子メール)。

私は次のように私のメインアクティビティクラスからこのメソッドを呼び出しています:

ここ
String myUser = email.getText().toString(); 
String storedUser = myDb.Exist(myUser); 


//If Username exist 
     if (myUser.equals(storedUser)) { 
      Toast.makeText(getApplicationContext(), "Username already  exist!", Toast.LENGTH_SHORT).show(); 
      return; 

     } 

私はMYUSER変数に入力されたメールを保存しています。

以前の入力と同じ電子メールであっても、データベースにデータを挿入することができます。つまり、例外が発生し、 ""が返されるたびにエラーが発生します。 Existsメソッドのエラーは何ですか?

+0

例外を飲み込まないでください: 'catch(Exception e){}'。例外が発生した場合、 '' ''が返され、電子メールがまだ存在しないと思っていることがわかります。 – wero

+0

例外が発生した場合の対処方法 – Kaushal28

+0

そして、なぜ毎回例外が発生するのですか? – Kaushal28

答えて

3

さて、私は自分で答えを見つけました! 私はDBHelperクラスに次のコードを使用:

public boolean Exists(String user){ 
    Cursor res = getAllData(); 
    int flag=0; 
    while (res.moveToNext()){ 
     String email =res.getString(3); 
     if(email.equals(user)){ 
      flag++; 
     } 
    } 

    if(flag==0){ 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

と私のメインの活動でコードを次のように:

//If Username exist 
    if (myDb.Exists(email.getText().toString())) { 
     showMessage("Error :(","This username is already exists."); 
     return; 

    } 
2

あなたはクエリ自体 にそれを得ることができます*コル= 'TABLE_NAME SELECT * FROMユーザのメールID '; * テーブル名とカラム名を正しく渡すと、カーソルが返されます。以下では、電子メールIDがテーブルに存在する場合にtrueを返すメソッドを追加しました。

public boolean isEmailExists(String emailAddress) { 
    SQLiteDatabase db =null; DatabaseHelper.getInstance(context).getReadableDatabase(); 
     Cursor cursor = null; 
    String selectQuery = "SELECT * FROM Table_name WHERE COLUMN_NAME ='emailAddress';"; 

      cursor = db.rawQuery(selectQuery, null); 

      if (cursor != null && cursor.getCount() > 0) { 
       return true; 
       } 
    return false; 
    } 

前述のとおり、適切なテーブル名とカラム名が正しく指定されています。

関連する問題