如何在 android studio 中使用 sqlite 为特定帐户创建表?

Posted

技术标签:

【中文标题】如何在 android studio 中使用 sqlite 为特定帐户创建表?【英文标题】:how to create table for specific account using sqlite in android studio? 【发布时间】:2018-11-26 19:30:04 【问题描述】:

我创建了一个表来使用 Sqlite 在 android Studio 中存储数据。我使用 Facebook SDK 通过 Facebook 创建一个帐户,并为该帐户存储一些应用程序的数据,而不是 Facebook 数据,然后显示它。但是当我注销并使用另一个帐户再次登录时,以前的数据仍然存在。

我想为不同的帐户存储不同的数据,所以当用户再次登录时,他的数据就会在那里。

问题是:怎么做?我应该创建另一个表来存储 Facebook 帐户详细信息吗?如果是,那么如何将数据表与特定帐户关联?

【问题讨论】:

【参考方案1】:

要做到这一点相对简单但没有那么多安全性,请在表中添加一列来保存(或表示)帐户。当您访问数据时包含一个条件(WHERE 子句)来仅选择帐户的行。

考虑以下几点:-

DROP TABLE IF EXISTS fb_account_data_simple;
CREATE TABLE IF NOT EXISTS fb_account_data_simple (_id INTEGER PRIMARY KEY, fb_data TEXT, fb_account TEXT);
INSERT INTO fb_account_data_simple (fb_data, fb_account) VALUES
    ('Face Book Data 001','FRED'),
    ('Face Book Data 002','FRED'),
    ('Face Book Data 001','MARY'),
    ('Face Book Data 003','MARY'),
    ('Face Book Data 004','MARY'),
    ('Face Book Date 003','FRED');
;
SELECT * FROM fb_account_data_simple WHERE fb_account = 'MARY';

这个;

创建一个名为 fb_account_data_simple 的表,其中有两列 1 用于数据,1 用于 Facebook 帐户名称。 然后为每个帐户加载 6 行数据 3 行。 最后,它只提取名为 MARY 的帐户的行,结果是:-

但上述内容并未标准化,因为同一个帐户名会被多次存储。

规范化版本将有一个帐户表和一个引用帐户的主表中的列。

例如考虑以下内容:-

DROP TABLE IF EXISTS fb_account;
CREATE TABLE IF NOT EXISTS fb_account (_id INTEGER PRIMARY KEY, account TEXT);
INSERT INTO fb_account (account) VALUES
    ('FRED'), -- will very likely have an _id value of 1 automatically generated by SQLite
    ('MARY')  -- will very likely have an _id value of 2 automatically assigned by SQLite
;
DROP TABLE IF EXISTS fb_data;
CREATE TABLE IF NOT EXISTS fb_data (_id INTEGER PRIMARY KEY, fb_data TEXT, account_reference INTEGER);
INSERT INTO fb_data (fb_data, account_reference) VALUES
    ('Face Book Data 001',1),
    ('Face Book Data 002',1),
    ('Face Book Data 001',2),
    ('Face Book Data 003',2),
    ('Face Book Data 004',2),
    ('Face Book Date 003',1);
;
SELECT fb_data, account 
    FROM fb_data
        JOIN fb_account ON account_reference = fb_ACCOUNT._id
    WHERE account = 'MARY'

这个;

为 Facebook 帐户创建表格 然后它会加载这两个帐户。 然后它为数据创建表 然后它为两个帐户加载一些数据(使用帐户行的唯一 ID) 然后它从数据表中提取数据并通过 JOIN 从帐户中获取相应的数据

最终结果是一样的(就对最终用户有用的数据而言):-

虽然对于相同的结果,这似乎工作更多,但它被认为是更好的方法,因为它更有效(数字键/索引通常遍历更快,使用更少的存储,因此减少了 i/o 开销)

如果您希望数据安全,那么这是一个更复杂但非常可行的问题。

【讨论】:

我需要解释第二种方法,如何添加帐户参考? 还要记住我们在列表视图中显示表格中的所有数据,但我们不需要显示任何参考或帐户名称, 1 使用登录后,您就有了帐户(id 和所有帐户特定数据,例如名称)。当您有新数据时,您可以将数据与引用该帐户的 id 一起存储。不显示值集,例如帐户名称只是省略了该行,因此所有数据都可以更改SELECT fb_data ....(即帐户已被删除。从查询中)。

以上是关于如何在 android studio 中使用 sqlite 为特定帐户创建表?的主要内容,如果未能解决你的问题,请参考以下文章

说说如何使用 Jaspersoft Studio 设计你的第一张报表

Sqlite表在小米Note 7s上不创建,但在其他手机和Android Studio中的虚拟设备上创建。

如何在 Android Studio 中使用我自己的 Android.mk 文件

如何在所有活动中使用Android Studio默认导航抽屉[重复]

如何在Android Studio中使用YouTube API在Android应用中列出视频

如何在visual studio开发android程序