[英]Android SQlite, how do I check if the value in database already exists?
[英]How to check if a user already exists in SQLite database in Android?
我正在尝试创建一个应用程序,该应用程序基于SQLite数据库执行基本的注册和登录功能。
如何检查用户是否已经存在? 我在这里尝试的是,如果我们尝试添加重复的用户,则应该吐出一条消息“ USER ALREADY EXITS”
我的代码:
final SQLiteDatabase database = this.openOrCreateDatabase("Users", MODE_PRIVATE, null);
database.execSQL("CREATE TABLE IF NOT EXISTS users (uname VARCHAR UNIQUE, pword VARCHAR UNIQUE)");
//database.execSQL("CREATE UNIQUE INDEX idx_something ON users (uname, pword)");
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username1 = userName.getText().toString();
String password1 = passWord.getText().toString();
if (username1 != null && !username1.trim().isEmpty() && password1 != null && !password1.trim().isEmpty()) {
try {
database.execSQL("INSERT OR REPLACE INTO users(uname, pword) VALUES('"+username1+"', '"+password1+"')");
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), passWord.getText().toString(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Please enter details", Toast.LENGTH_LONG).show();
}
}
});
logIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, secondscreen.class);
try {
Cursor c = database.rawQuery("SELECT * FROM users", null);
int unameIndex = c.getColumnIndex("uname");
int pwordIndex = c.getColumnIndex("pword");
c.moveToFirst();
while (c != null) {
{
String savedUname = c.getString(unameIndex);
String savedPword = c.getString(pwordIndex);
Log.i("Table Content:",savedPword.toString()+savedUname.toString());
if (savedUname.equals(userName.getText().toString())) {
if (savedPword.equals(passWord.getText().toString())) {
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), " Incorrect username or password ", Toast.LENGTH_LONG).show();
}
}
}
c.moveToNext();
}
}catch (Exception e){
e.printStackTrace();
}
}
});
你可以这样
logIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username1 = userName.getText().toString().trim();
Intent intent = new Intent(MainActivity.this, secondscreen.class);
try {
Cursor c = database.rawQuery("SELECT * FROM users where uname= "+username1, null);
if(c.getCount()>0)
{
Toast.makeText(getApplicationContext(), "USER ALREADY EXITS", Toast.LENGTH_LONG).show();
}
}catch(Exception e)
{
e.printStackTrace();
}
}
});
将自动递增ID添加到表定义中,例如:
CREATE TABLE IF NOT EXISTS users (id INTEGER primary key AUTOINCREMENT, uname VARCHAR UNIQUE, pword VARCHAR)
每当将新记录插入到表中时,id字段都会自动将其自身增加1,并且将ID
字段用primary key
确保表中的每一行数据都是唯一的。
请记住,只作uname
作为UNIQUE
能保证所有注册用户都会有唯一的用户名。
我想指出的是,在像这样检查登录名时不检索所有用户
SELECT * FROM users
检索用户,如下所示:
SELECT * FROM users WHERE uname = "+uname_login_edittext+"";
从登录表单的username
段中获取username
文本。
由于您表中的所有用户名都是唯一的,因此只会检索1条记录或什么都不会,因此您可以使用它来检查是否有注册用户,然后继续登录。
编辑:
尝试下面的登录代码,像我一样,使savedUname
和savedPword
Strings成为全局变量。
String inputUname = userName.getText().toString(); //get username from login form
String savedUname = null;
String savedPword = null;
Cursor c = database.rawQuery("SELECT * FROM users WHERE uname = "+inputUname+"", null);
int unameIndex = c.getColumnIndex("uname");
int pwordIndex = c.getColumnIndex("pword");
c.moveToFirst();
if(c != null) {
savedUname = c.getString(unameIndex);
savedPword = c.getString(pwordIndex);
{
if (savedUname.equals(userName.getText().toString())) {
if (savedPword.equals(passWord.getText().toString())) {
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), " Incorrect username or password ", Toast.LENGTH_LONG).show();
}
}
尝试这个
database.execSQL("REPLACE INTO users(uname, pword) VALUES('"+username1+"', '"+password1+"')");
取消注释索引创建查询的注释,卸载应用程序,然后重试
如果这不起作用,则可能值必须具有一些空间或某些内容
如果这不起作用,那么您可以像这样简单地使用嵌套查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.