假设我有很多具有一些基本特征的人员名单:
马特,27岁,男性
安妮,49岁,女性
等...
我想在本地存储此数据,以用于不需要访问互联网的独立桌面应用程序。我当前的方法是将名称写入json文件,并在程序打开时将它们全部读入java中的Person类;但是,我不认为这是有效的,因为只有在有人进行搜索时才需要访问数据。
所以我考虑过一个简单的JSONparser,比如说searchNameInFile(“Matt”,“data.json”){return person;但是我不知道这是否是一种在效率方面存储数据的好方法。我很快就考虑了sqlite,但我只存储了一个数据表,并认为它可能有点过分。什么是存储和搜索本地数据的合适,有效的方法?
答案 0 :(得分:1)
您还可以将另一个简单的内存数据库视为H2。它将数据保存在作为文件存储在计算机中的关系数据库中。它的优点是具有高检索速度基准。 H2
优点是配置就像创建数据库对象一样简单,并将其配置为使用内存文件。
答案 1 :(得分:0)
我真的认为你应该重新考虑SQLite。
https://www.tutorialspoint.com/sqlite/sqlite_java.htm
您的数据将本地存储在一个文件中,该文件可以使用标准Java SQL内容轻松查询。它不需要任何服务器软件或互联网连接。
如果您不想使用SQLite,这里有两种可能的方法,具体取决于您的关注点。
如果你只关心时间复杂性,但有足够的内存可以存放,你可以将数据存储在一个有效的结构中,例如HashMap,并使用Serial的内置的Java来编写HashMap一个文件,并在下次启动时将其读回。
//Where Person is a data class that implements Serializable and contains your desired fields
public void saveData(HashMap<String, Person> people) {
FileOutputStream f = new FileOutputStream(new File("people.txt"));
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(people);
o.close();
f.close();
}
public HashMap<String, Person> loadData() {
FileInputStream fi = new FileInputStream(new File("people.txt"));
ObjectInputStream oi = new ObjectInputStream(fi);
HashMap<String, Person> data = (HashMap<String, Person>) oi.readObject();
oi.close();
fi.close();
return data;
}
如果您不介意O(n)搜索时间,那么您在每次搜索时重新读取文件的当前解决方案都可以。
答案 2 :(得分:0)
可能有点矫枉过正
重新发明轮子将是真正的过度杀伤力。有很多库和方法可用于存储和加载数据。
由于您希望将数据本地存储在文件中,但又想要搜索数据,因此嵌入式SQL数据库应该是一个不错的选择。 SQLite,h2或HSQL。
对于访问数据,您可以使用从普通JDBC到 Spring Data JPA
的任何内容