在SQLite数据库和共享首选项之间存储信息的良好机制是什么?
为什么要使用共享首选项?为什么要使用sqlite?我试图找到它们之间的区别,这是更好的数据存储机制,但是我无法在Google上找到合适的答案。请帮我提供示例和解释。
在SQLite数据库和共享首选项之间存储信息的良好机制是什么?
为什么要使用共享首选项?为什么要使用sqlite?我试图找到它们之间的区别,这是更好的数据存储机制,但是我无法在Google上找到合适的答案。请帮我提供示例和解释。
Answers:
这实际上取决于您要存储的数据。
SQLite的
大量相同的结构化数据应存储在SQLite数据库中,因为数据库是为此类数据设计的。由于数据是由数据库结构化和管理的,因此可以使用查询语言(如SQL)来查询数据,以获取与某些条件匹配的子集。这样就可以搜索数据。当然,管理和搜索大量数据会影响性能,因此从数据库中读取数据可能比从SharedPreferences中读取数据要慢。
共享首选项
SharedPreferences是一个键/值存储,您可以在其中存储某些键下的数据。要从商店读取数据,您必须知道数据密钥。这使得读取数据非常容易。但是,存储少量数据就像存储和读取大型结构化数据一样困难,因为您需要为每个数据定义键,此外,您不能真正在数据中进行搜索,除非您有特定的概念命名键。
这个问题的答案是可以接受的,但是我认为关于速度的话题还有更多要说的。
应用程序的SharedPreferences和Sqlite DB都只是文件,存储在设备文件系统上的应用程序目录中。如果数据量不太大,则Sqlite选项将涉及一个更大,更复杂的文件,并且具有更多的处理开销以进行简单访问。
因此,如果数据的性质不决定您的选择(如接受的答案中所述),并且速度很重要,那么最好使用SharedPreferences。
读取一些数据通常是显示主要活动的关键路径,因此我认为速度通常非常重要。
关于速度和效率的最后一个想法-如果您需要对某些结构化数据使用Sqlite数据库,则将用户首选项存储在数据库中可能会更有效,因此您无需打开第二个文件。这是一个相当小的注意事项-仅当您需要在显示主要活动之前需要访问结构化数据和首选项时,才值得考虑。
我的看法是,这与速度或大小无关,而与您要对数据执行的操作有关。
如果你打算做加盟,排序,和其他操作数据库上的数据,然后去sqlite的。一个示例是按日期对数据进行排序。
如果要映射简单值(如int,boolean,String),请使用“首选项”。数据库操作在这里不起作用,不用说您需要拥有所有键。一个示例是用户密码或应用程序配置。
接受Preferences的最大诱惑是,当您想使用它将扁平化的POJO(序列化JSON对象)存储为String时。有这样的需求实际上是使用Sqlite的标志。为什么呢 因为复杂的数据最终将需要复杂的运算。想象一下,检索一个可以通过简单的“ SELECT ... WHERE id = 1”处理的特定条目。在“首选项”路径中,这是从反序列化到迭代结果的漫长过程。
SharedPreferences
一次清除多个键/值(例如user
和password
键),以确保两个键都未设置或两个键都已设置。
忘记SQLLite忘记SharedPreferences,使用Realm。适用于所有本地存储的单一解决方案。您可以将普通的旧Java对象用作RealmObject,然后将数据存储在那里。您可以将选择的查询转换为JSON文件。无需解析整个数据库。检查此链接:https : //realm.io/news/introducing-realm/