android - 如何从具有两个表的 SQLite 数据库中获取用户详细信息?
问题描述
我正在尝试在我的导航抽屉中获取用户详细信息。我有两个不同的表,一个已经存储了用户名和课程,另一个有在注册期间获取的用户的 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;
解决方案
您可以使用JOIN,(我相信从之前的问题中 SID 在两个表中,所以这就是您将用作JOIN的基础)。
所以你可以使用类似的东西SELECT * FROM userinfo JOIN userreg ON userinfo.sid = userreg.sid
- 请注意,仅使用列名 sid 会产生歧义,因此需要在列前加上表名。就目前而言,您将不得不对结果中的列进行 sid (这不应该成为问题,因为它们都是相同的值,但不使用 AS cab 指定别名对于具有相同名称的列是有问题的)。
要利用查询便利方法,JOIN 需要成为第一个(表)参数的一部分。
所以上面将被编码为: -
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 方法。注册活动设置intent extras 并使用setResult 指示结果代码,然后返回intent。
有很多关于堆栈溢出的示例,例如将数据发送回 Android 中的主活动
推荐阅读
- python - 在没有地图的情况下替换熊猫数据框中的多个值的优雅方法?
- image - Bootstrap Carousel 产生“空白图像”
- python - 如何组合两个 RGB 图像而它们之间没有空白
- javascript - jQuery 切换隐藏这么快?
- xamarin - 有没有人能够看到 Xamarin Forms 和 AppCenter.ms 的崩溃附件?
- c# - 主机模式下的 AWS ECS 服务发现仅允许 SRV 记录
- javascript - 在 Chrome Kiosk 模式下禁用/自定义与触摸相关的输入 UI
- python - python kill python的子进程
- django - 如何在同一台服务器(Digitalocean 或 aws)上部署 react 作为前端和 drf(django rest 框架)
- sql - 自动创建总差比较行