Xamarin.Android - SQLite ORM 查询挑战

Xamarin.Android - Challenge with SQLite ORM queries

我已经使用 Xamarin 几个星期了,我正在尝试寻找使用 SQLite ORM 的最佳实践 queries.I 有一个登录页面,该页面先启动,然后用户才能访问app.I 在第一个 activity 出现在屏幕之前创建数据库,并在 table 为 [=33= 时立即将管理员登录详细信息插入用户的 table ] 重点是,管理员要登录并导入一个 xml 文件,其中包含所有其他用户的个人信息 information.This 从文件中读取信息并保存到 sqlite。

接下来,其他用户可以在导入并保存他们的详细信息后登录 successfully.My 挑战是,在登录时,我想按如下方式验证详细信息:

1.Compare 输入的用户名和数据库中的单个用户名

**2.Check输入的密码,看是否与输入的用户名相符**

我目前正在使用 select 查询从数据库中提取所有密码,然后比较两个字符串(来自数据库和编辑文本字段)。但是如果它是一个大数据库,阅读所有数据将是相当 expensive.How 我要这样做吗?

如何同时查找该用户名的密码?

下面是我的代码:

namespace sample.NameSpace
{
    [Activity (MainLauncher = true)]
public class MainActivity : Activity
{


Button login = FindViewById<Button> (Resource.Id.login);

        try{

        login.Click += (object sender, EventArgs e) => {

if (TextUtils.IsEmpty(userName.Text.ToString())) {

                makeToast();

            } else if (TextUtils.IsEmpty(password.Text.ToString())) {

                makeToast();
            } else {


                    returningUser = userName.Text.ToString().Trim();

                    returningUserPassword = password.Text.ToString().Trim();


                }

//Check to see if the name is in the db already
            List<string> allUsers = GetAllUserNames();

                //Loop through the list of names and compare the retrieved username with the name entered in the text field
                string retrievedDbName ="";

                foreach(string name in allUsers )
                {

                    retrievedDbName = name .Trim();

                }

                //Verify name
                if(retrievedDbName .Equals(returningUser))
                    {

                Toast.MakeText(this,
                    "Login Successful !", ToastLength.Short).Show();

                Intent intent = new Intent (this, typeof(HomeActivity));
                StartActivity (intent);

            } 
            else
            {
                Toast.MakeText(this, "User Name or Password does not match", ToastLength.Short).Show();
            }

        };
        } catch(Exception e){

            logger.Exception (this, e);
        }


public List<string>GetAllUserNames()
    {
        List<UserInfoTable> allUserNames = new List<UserInfoTable> ();

        allUserNames = dataManager.GetSingleUserName ();

        string name = "";

        foreach(var UserName in allUserNames)
        {
            Console.WriteLine ("Usernames from db :" + name.ToString());
        }

        return allUserNames;
    }

然后是DataManager class:

public List<UserInfoTable> GetSingleUserName()
    {
        UserInfoTable user = new UserInfoTable ();

        using (var db = dbHandler.getUserDatabaseConnection ()) {

            var userName =  db.Query<UserInfoTable> ("select * from UserInfoTable where user_name = ?", user.USER_NAME);

            return userName;
        }

    }
public bool CheckLogin(string user, string password)
{
  bool valid = false;

  using (var db = dbHandler.getUserDatabaseConnection ()) {

    var user =  db.Query<UserInfoTable> ("select * from UserInfoTable where user_name = ? and password = ?", user, password);

    if (user != null) valid = true;
  }

  return valid;
}