【问题标题】:How to find uniqueness of data field (eg. Email) every time it is inserted in the database?每次插入数据库时​​如何查找数据字段(例如电子邮件)的唯一性?
【发布时间】:2016-04-02 10:17:27
【问题描述】:

我正在开发一个安卓应用程序,用户在其中输入他们的姓名、姓氏、电子邮件和密码以进行注册。这个输入过程工作得很好,现在我想每次当用户输入他/她的电子邮件时检查输入的电子邮件是否已经存在于我的数据库中。

为此,我在 DBHelper 类中尝试了以下方法:

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;
}

这里 TABLE_NAME 是我的表的名称,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 方法有什么错误?

【问题讨论】:

  • 不要吞下异常:catch(Exception e){ }。如果发生异常,则返回"",并且您知道认为该电子邮件尚不存在。
  • 那么出现异常怎么办?
  • 那为什么每次都会出现异常呢?
  • 因为编程错误?为您的问题添加例外
  • 列的名称是什么? EMAIL 还是 COL_4?

标签: java android database sqlite


【解决方案1】:

好的,我自己找到答案了! 我在 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】:

    您可以在查询本身中得到它 *SELECT * FROM TABLE_NAME WHERE Col = 'user email 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;
        }
    

    正如我之前提到的,适当的表名和列名已正确给出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2012-09-24
      相关资源
      最近更新 更多