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

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

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

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

【问题讨论】:

    标签: android android-studio android-sqlite facebook-sdk-4.0


    【解决方案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 ....(即帐户已被删除。从查询中)。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多