检查用户是否在数据库中
Check if a user is in the db
我有那些方法
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),则该用户存在。如果不是,则插入新用户。但是如果我再次输入同一个用户,我会收到“您已注册”的消息。所以那里有问题。有什么想法吗?
谢谢,
西奥.
如果 任何 用户存在,您将拒绝该用户。
如果您只想拒绝一个已经存在的用户,从而允许多个用户,那么您需要检查该特定用户是否存在。
所以 :-
添加新方法:-
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
方法 returns 插入行的 rowid 如果插入行则为 1 或更大, 否则它 returns -1).
我有那些方法
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),则该用户存在。如果不是,则插入新用户。但是如果我再次输入同一个用户,我会收到“您已注册”的消息。所以那里有问题。有什么想法吗?
谢谢,
西奥.
如果 任何 用户存在,您将拒绝该用户。
如果您只想拒绝一个已经存在的用户,从而允许多个用户,那么您需要检查该特定用户是否存在。
所以 :-
添加新方法:-
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
方法 returns 插入行的 rowid 如果插入行则为 1 或更大, 否则它 returns -1).