如何从具有两个表的SQLite数据库中获取用户详细信息?

时间:2019-02-07 16:01:15

标签: android database sqlite fetch

我正在尝试在导航抽屉中获取用户详细信息。我有两个不同的表,一个表已经存储了用户名和课程,另一个表具有在注册过程中获取的用户的ID和电子邮件。我想显示用户名,ID,课程和电子邮件。我确实有一个具有ID,电子邮件和密码的用户类,用于注册,但没有名称和课程。我应该如何从此类中获取数据?

以下方法用于从具有相同ID的表中获取用户名。我想在导航抽屉上显示它。我应该如何调用该函数并显示结果?

public String getUserNameFromSID(String sid) {
    String rv = "";
    String whereclause = KEY_SID + "=?";
    String[] whereargs = new String[]{sid};
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
    if (csr.moveToFirst()) {
        rv = csr.getString(csr.getColumnIndex(KEY_NAME));
    }
    csr.close();
    return rv;

1 个答案:

答案 0 :(得分:1)

您可以使用 JOIN ,(我相信从前面的问题来看,两个表中都包含SID,因此这就是您用作 JOIN 的基础)。

因此您可以使用类似SELECT * FROM userinfo JOIN userreg ON userinfo.sid = userreg.sid

  • 请注意,仅使用列名sid会产生歧义,因此需要在表名前添加列名。按照目前的情况,您将不得不对结果中的列进行sid处理(这不成问题,因为它们的值都是相同的,但是对于使用相同名称的列来说,使用AS cab不指定别名是有问题的。)

要使用 query 便捷方法,JOIN必须是第1个(表)参数的一部分。

因此上述代码将被编码为:-

public String getUserNameFromSID(String sid) {
    String rv = "";
    String joinclause = " JOIN " + TABLE_USERREG + " ON " + TABLE_USERINFO + "." + KEY_SID + " = " + TABLE_USERREG + "." + KEY_SID; //<<<<<<<<<< ADDED
    String whereclause = KEY_SID + "=?";
    String[] whereargs = new String[]{sid};
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor csr = db.query(TABLE_USERINFO + joinclause,null,whereclause,whereargs,null,null,null); //<<<<<<<<<< CHANGED
    if (csr.moveToFirst()) {
        rv = csr.getString(csr.getColumnIndex(KEY_NAME));
    }
    csr.close();
    return rv;
}
  • 注意,以上为原理代码
    • 变量名和标识符可能无法反映实际代码,因此可能需要更改。
    • 该代码尚未运行或测试,因此可能包含一些小错误。
    • 以上仅返回用户名,您无法返回多个不同的值,因此您需要返回一个对象,例如用户对象以包含多个值。您将获得与设置上面的 rv 相似的方式设置对象的值。

其他评论:-

  

问题是,我需要将Sid参数传递给   我只能在注册/登录页面上执行的功能。那怎么能   我将此值传递到导航页面吗?

Android所使用的术语是“活动”,而不是页面。您可以在实例化一个Intent为调用做准备之后,使用Intent Extras将数据从一个活动传递到另一个被调用/启动/调用的活动。也就是说,该活动是直接从父活动(在您的情况下为注册活动)中调用的。

例如,如果从初始活动中调用了注册活动并从该活动中返回,那么您仍然可以使用意图返回值,但是应该使用startActivityForResult调用/启动/调用注册活动。开始注册活动的活动应覆盖onActivityResult方法。注册活动设置了意向附加,并使用setResult指示结果代码,然后返回意向。

关于Stack溢出的例子很多,例如Sending data back to the Main Activity in Android