有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在每次将数据字段(如电子邮件)插入数据库时发现其唯一性?

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

为此,我在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是包含用户电子邮件的列,我将用户输入的输入字符串(email)作为此方法的参数传递

我从我的主活动类调用此方法,如下所示:

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方法中的错误是什么


共 (2) 个答案

  1. # 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. # 2 楼答案

    您可以在查询本身中得到这一点 *从表格_NAME中选择*,其中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;
        }
    

    正如我前面提到的,正确地给出了相应的表名和列名