【发布时间】:2023-03-09 16:46:01
【问题描述】:
目前使用带有 Android Studio 的 SQlite 数据库来构建登录应用程序。我目前正在尝试逐行从数据库中检索数据,并将用户名和密码与用户的输入用户名和密码进行比较。这样做我想找到匹配的用户名和密码,然后输出相应的用户信息。
我不确定最好的方法是什么。我使用了游标,但似乎只能返回数据库中的第一个值。最好使用自动递增的 ID 列并将计数值与 for 循环中的 ID 进行比较?或者最好将整个数据库输出到一个数组中,然后在主活动上使用一个计数值来梳理数组以获得必要的信息。
数据库代码:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "BIOSECURE";
public static final String TABLE_NAME = "USER";
public static final String COL_1 = "USERNAME";
public static final String COL_2 = "PASSWORD";
public static final String COL_3 = "FIRSTNAME";
public static final String COL_4 = "SECONDNAME";
public static final String COL_5 = "FINGERPRINT";
public static final String COL_6 = "FACE";
// 基础数据库
public DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE USER ( USERNAME TEXT PRIMARY KEY, PASSWORD TEXT, FIRSTNAME TEXT, SECONDNAME TEXT, FINGERPRINT BLOB, FACE BLOB)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS USER");
}
// Inserting into database
public boolean insertUserData (String inputUsername, String inputPassword, String inputFirstName, String inputSecondName)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL_1, inputUsername);
cv.put(COL_2, inputPassword);
cv.put(COL_3, inputFirstName);
cv.put(COL_4, inputSecondName);
// contentValues.put(COL_5, inputFingerprint);
// contentValues.put(COL_6, inputFace);
long result = db.insert(TABLE_NAME,null, cv);
db.close();
return result!= -1;
}
// Not working yet
public Cursor CompareUserData () {
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
return cursor;
主要活动代码:
// CHECKING USER LOGIN DETAILS
Cursor cursor = db.CompareUserData();
for (count = 0; count<=cursor.getCount();count++)
{
if (cursor.moveToPosition(count))
{
if (UsernameInput.getText().toString().equals(cursor.getString(0))&&PasswordInput.getText().toString().equals(cursor.getString(1)))
{
passUser = cursor.getString(0);
passPass = cursor.getString(1);
passFirst = cursor.getString(2);
passSecond = cursor.getString(3);
getUser();
getPass();
getFirst();
getSecond();
Toast.makeText(getApplicationContext(), "Successfully logged in", Toast.LENGTH_SHORT).show();
LoginValidation();
}
}
}
if (count > cursor.getCount())
{
Toast.makeText(getApplicationContext(),"Incorrect Username or password",Toast.LENGTH_SHORT).show();
}
【问题讨论】: