【问题标题】:Check if a user is in the db检查用户是否在数据库中
【发布时间】:2018-10-03 21:37:42
【问题描述】:

我有这些方法

 public void insert(ContentValues values){
    try {
        database = dbhelper.getWritableDatabase();
        database.insertOrThrow(dbhelper.TABLE_NAME, null, values);
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }
    finally
    {
        //releasing the resources.
        database.close();
        dbhelper.close();
    }
}
public Cursor query(){
    database=dbhelper.getReadableDatabase();
    Cursor cur=database.query(DbHelper.TABLE_NAME, null, null, null, null, null, null);

    return cur;

}

一个插入数据,另一个从我的数据库中查询数据。

现在我在数据库中插入一些数据

   values = new ContentValues();
                values.put("email",email);
                values.put("pass",password);
                values.put("contact",contact);

                DetailsDb detailsDb = new DetailsDb(this);
                Cursor cursor = detailsDb.query();

                if(cursor.getCount() > 0){

                    Toast.makeText(this,"Ooops user exists",Toast.LENGTH_SHORT).show();
                }else{

                    detailsDb.insert(values);
                    Toast.makeText(this,"You are registered",Toast.LENGTH_SHORT).show();
                }

基本上,我是说。如果数据库中有一行(cursor.getCount > 0),则用户存在。如果没有,则插入新用户。但是,如果我再次输入同一个用户,我会收到“您已注册”消息。所以那里出了点问题。有什么想法吗?

谢谢,

西奥。

【问题讨论】:

  • 因为查询函数没有检查数据是否存在

标签: android sqlite cursor


【解决方案1】:

如果存在任何用户,您将拒绝该用户。

如果您只想拒绝一个已经存在的用户,从而允许多个用户,那么您需要检查该特定用户是否存在。

所以:-

添加一个新方法:-

public Cursor getUser(String email){
    database=dbhelper.getReadableDatabase();
    String whereclause = "email=?";
    String[] whereargs = new String[]{email};
    Cursor cur=database.query(DbHelper.TABLE_NAME, null, whereclause, whereargs, null, null, null);
    return cur;
}

这相当于SELECT * FROM your_table WHERE email = the_email_to_check; 而不是SELECT * FROM your_table;

然后使用:-

values = new ContentValues();
values.put("email",email);
values.put("pass",password);
values.put("contact",contact);

DetailsDb detailsDb = new DetailsDb(this);
Cursor cursor = detailsDb.getUser(email); //<<<<<<

if(cursor.getCount() > 0){
    Toast.makeText(this,"Ooops user exists",Toast.LENGTH_SHORT).show();
} else {
    if (detailsDb.insert(values) > 0) {
        Toast.makeText(this,"You are registered",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this,"Attempt to register unsuccessful",Toast.LENGTH_SHORT).show();
    }
}
  • 请注意,还有一个额外的检查来查看插入是否实际插入了行(insert 方法返回插入行的 rowid,如果插入了行,则返回 1 或更大,否则返回 -1)。

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2021-03-20
    • 2021-12-15
    • 2021-12-19
    • 2016-09-04
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多