[英]How to store simple data for standalone java application
假设我有一长串具有一些基本特征的人:
Matt,27岁,男
安妮(49岁),女
等等...
我想将此数据存储在本地,而不需要访问Internet的独立桌面应用程序。 我当前的方法是将名称写入json文件,并在打开程序时将它们全部读取到java中的Person类中。 但是,我认为这样做效率不高,因为仅当有人执行搜索时才需要访问数据。
所以我考虑了一个简单的JSONparser,比方说searchNameInFile(“ Matt”,“ data.json”){return person; },但我不知道这是否是存储效率方面的好方法。 我不久就考虑了sqlite,但是我只存储一张数据表,并认为这可能会过大。 有什么合适的,有效的方法来存储和搜索本地数据?
我真的认为您应该重新考虑SQLite。
https://www.tutorialspoint.com/sqlite/sqlite_java.htm
您的数据将存储在本地文件中,可以使用标准Java SQL内容轻松查询。 它不需要任何服务器软件或互联网连接。
如果您不想使用SQLite,则有两种可能的方法,具体取决于您关心的事情。
如果您只关心时间的复杂性,但有足够的内存可以使用,则可以将数据存储在高效的结构中,例如HashMap,然后使用Java内置的Serializable将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)个搜索时间,那么当前的解决方案是在每次搜索时重新读取文件。
您还可以将另一个简单的内存数据库DB视为H2。 它将数据保存在关系数据库中,该数据库作为文件存储在计算机中。 优点是它具有高检索速度基准。 H2
优点是配置就像创建数据库对象并将其配置为使用内存文件一样简单。
这可能是过大的
重新发明轮子将是真正的杀伤力。 有很多用于存储和加载数据的库和方法。
由于您要将数据本地存储在文件中,而且还希望在数据中进行搜索,因此嵌入式SQL数据库对于您来说应该是一个不错的选择。 SQLite,h2或HSQL。
为了访问数据,可以使用从纯JDBC到Spring Data JPA的任何数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.