首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite相关用户信息检索

SQLite相关用户信息检索
EN

Stack Overflow用户
提问于 2019-11-22 23:08:52
回答 1查看 161关注 0票数 1

我正在使用SQLite数据库开发一个登录系统。我已经有了一个注册表单,它可以很好地创建所有用户,我还创建了一个方法来检查输入到EditText中的用户名是否存在。但是现在我的问题是,你将如何从那个用户检索所有相关信息,例如,我还需要检查那个特定用户的密码是否匹配,我还需要从数据库中的用户那里检索一些测试分数,然后在主页中显示它们。下面是用于登录用户的主要活动中的代码:

代码语言:javascript
复制
public void loginUser() {
        EditText usernameInput = findViewById(R.id.login_username);
        EditText passwordInput = findViewById(R.id.login_password);
        String loginUsername = usernameInput.getText().toString();
        String loginPassword = passwordInput.getText().toString();

        if(loginUsername.matches("") || loginPassword.matches("")) {
            Toast.makeText(this, "Fields cannot be empty", Toast.LENGTH_SHORT).show();
        } else {
            if (dbHelper.ifUserExists(loginUsername)) {
                //password verification and login
                //how to retrieve relevant users password and compare to password input?
            } else {
                Toast.makeText(this, "Incorrect username or password", Toast.LENGTH_SHORT).show();
            }
        }
    }

下面是来自databaseHelper的检查用户是否存在的方法:

代码语言:javascript
复制
public boolean ifUserExists(String user) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_USERS,
                new String[]{KEY_ID, KEY_USERNAME, KEY_PASSWORD, KEY_SAT_READING, KEY_SAT_MATH, KEY_ACT_READING, KEY_ACT_MATH},
                KEY_USERNAME + "=?",
                new String[]{user},
                null, null, null);
        if(cursor != null && cursor.moveToFirst()&& cursor.getCount() > 0) {
            return true;
        } else {
            return false;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-23 02:19:21

您可以使用的方法之一是拥有一个包含保存数据的变量的用户对象。使用进程而不是返回布尔值时,这个inconjuction返回用户或null。

也许可以根据您的代码来考虑这个演示应用程序,为了简洁起见,它在数据库帮助程序中包含了一个用户类。

DatabaseHelper.java :-

代码语言:javascript
复制
public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;
    public static final String TABLE_USERS = "users";
    public static final String KEY_ID = BaseColumns._ID;
    public static final String KEY_USERNAME = "username";
    public static final String KEY_PASSWORD = "password";
    public static final String KEY_SAT_READING = "reading";
    public static final String KEY_SAT_MATH = "satmath";
    public static final String KEY_ACT_READING = "actreading";
    public static final String KEY_ACT_MATH = "actmath";

    SQLiteDatabase db;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        db = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String users_crt_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_USERS +
                "(" +
                KEY_ID + " INTEGER PRIMARY KEY," +
                KEY_USERNAME + " TEXT UNIQUE," +
                KEY_PASSWORD + " TEXT," +
                KEY_SAT_READING + " TEXT," +
                KEY_SAT_MATH + " TEXT," +
                KEY_ACT_READING + " TEXT," +
                KEY_ACT_MATH + " TEXT" +
                ")";
        db.execSQL(users_crt_sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public long insertNewUser(String name, String password) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_USERNAME,name);
        cv.put(KEY_PASSWORD,password);
        return db.insert(TABLE_USERS,null,cv);
    }

    public User checkUser(String name, String password) {
        User rv = null;
        Cursor csr = db.query(
                TABLE_USERS,
                null,
                KEY_USERNAME + "=? AND " + KEY_PASSWORD + "=?",
                new String[]{name,password},
                null,null,null
        );
        if (csr.moveToFirst()) {
            rv = new User();
            rv.setUserId(csr.getLong(csr.getColumnIndex(KEY_ID)));
            rv.setUserName(name);
            rv.setUserPassword("");
            rv.setUserSatReading(csr.getString(csr.getColumnIndex(KEY_SAT_READING)));
            rv.setUserSatMath(csr.getString(csr.getColumnIndex(KEY_SAT_MATH)));
            rv.setUserActReading(csr.getString(csr.getColumnIndex(KEY_ACT_READING)));
            rv.setUserActMath(csr.getString(csr.getColumnIndex(KEY_ACT_MATH)));
        }
        csr.close();
        return rv;
    }

    public class User {
        long userId;
        String userName;
        String userPassword;
        String userSatReading;
        String userSatMath;
        String userActReading;
        String userActMath;

        public User() {
        }

        public User(String name, String password) {
            this(-1L, name, password, null, null, null, null);
        }

        public User(long id, String name, String password, String satReading, String satMath, String actReading, String actmath) {
            this.userId = id;
            this.userName = name;
            this.userPassword = password;
            this.userSatReading = satReading;
            this.userSatMath = satMath;
            this.userActReading = actReading;
            this.userActMath = actmath;
        }

        public long getUserId() {
            return userId;
        }

        public void setUserId(long userId) {
            this.userId = userId;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getUserPassword() {
            return userPassword;
        }

        public void setUserPassword(String userPassword) {
            this.userPassword = userPassword;
        }

        public String getUserSatReading() {
            return userSatReading;
        }

        public void setUserSatReading(String userSatReading) {
            this.userSatReading = userSatReading;
        }

        public String getUserSatMath() {
            return userSatMath;
        }

        public void setUserSatMath(String userSatMath) {
            this.userSatMath = userSatMath;
        }

        public String getUserActReading() {
            return userActReading;
        }

        public void setUserActReading(String userActReading) {
            this.userActReading = userActReading;
        }

        public String getUserActMath() {
            return userActMath;
        }

        public void setUserActMath(String userActMath) {
            this.userActMath = userActMath;
        }
    }
}

  • 注释checkUser方法相当于idUserExists方法,但是如果找不到用户,则返回的用户对象将为null。使用游标时,您应该关闭游标。如果游标由一个returns.
  • Lilewise方法返回,则
  • 检查游标为null,因为如果方法为Check moveTofirst,而游标的计数为0,则将始终返回有效的游标,而如果计数为0 moveToFirst将返回false,则只有其中一个检查为needed.

在下面的活动中使用上述内容,这反映了您现有的代码和您想要实现的目标。

在最初启动时,应用程序添加了一个用户(用于妖魔化),该用户的名字是Admin,密码是UI由一个显示未登录的textView !(显示顶部)、两个编辑文本(按照您的代码)和一个登录按钮组成。

MainActivity.java

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    DatabaseHelper dbHelper;
    DatabaseHelper.User current_user = null;
    EditText loginUsername, loginPassword;
    TextView status;
    Button login;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        status = this.findViewById(R.id.status);
        loginUsername = this.findViewById(R.id.login_username);
        loginPassword = this.findViewById(R.id.login_password);
        login = this.findViewById(R.id.login);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginUser();
            }
        });

        dbHelper = new DatabaseHelper(this);
        dbHelper.insertNewUser("Admin","adminpassword");

    }

    private void loginUser() {
        if (
                loginUsername.getText().toString() == null
                        || loginUsername.getText().toString().length() < 1
                        ||loginPassword.getText().toString() == null
                        || loginPassword.getText().toString().length() < 1) {
            Toast.makeText(this, "Fields cannot be empty", Toast.LENGTH_SHORT).show();
            return;
        }
        if ((current_user = dbHelper.checkUser(loginUsername.getText().toString(),loginPassword.getText().toString())) != null) {
            loginUsername.setVisibility(View.GONE);
            loginPassword.setVisibility(View.GONE);
            login.setText("DO SOMETHNG");
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(),"Hello " +
                            current_user.getUserName() +
                            " you are logged in so you can do something!",Toast.LENGTH_SHORT).show();
                }
            });
            status.setText("Successfully Logged-In as " + current_user.getUserName());
        } else {
            Toast.makeText(this, "Incorrect username or password", Toast.LENGTH_SHORT).show();
        }
    }
}

结果

初始运行

  • ,如果编辑文本中没有任何内容,并且单击了Login按钮,则*字段不能空消息。如果输入了无效的用户和密码组合并单击Login>E 238>按钮,则会对e 139不正确的用户名或密码消息进行烤烤。

<代码142输入有效的用户名和密码:- F 143<>H144E 145的topd处被完全记录为E 145记录在哪里?<?<?是用于用户名和密码被删除的username).

  • The编辑文本。
  • ,Login按钮更改为,根据:-

做某事

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59002935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档