我创建了一个表,使用Sqlite在Android Studio中存储数据。我使用Facebook SDK通过Facebook创建一个帐户,并为该帐户存储一些应用程序数据(而不是Facebook数据),然后显示它。但是当我注销并使用另一个帐户再次登录时,以前的数据仍然存在。
我想为不同的帐户存储不同的数据,因此当用户再次登录时,他的数据将在那里。
问题是:该怎么做?我是否应该创建另一个表来存储Facebook帐户详细信息?如果是,那么如何将数据表与特定帐户关联?
答案 0 :(得分:0)
要相对简单地执行此操作,但又没有那么多的安全性,请在表格中添加一列来保存(或代表)该帐户。当您访问数据时,包含一个条件(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';
这个;
但是,由于多次存储相同的帐户名,上述内容未标准化。
规范化版本将具有该帐户的表和主表中引用该帐户的列。
例如,考虑以下内容:-
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'
这个;
最终结果是相同的(就对最终用户有用的数据而言):-
尽管对于相同的结果,这似乎可以做更多的工作,但是它被认为是更好的方法,因为它更有效(数字键/索引通常遍历更快并且使用更少的存储空间,因此减少了I / O开销)
如果您希望数据安全,那么这是一个更复杂的问题,但很可行。