如何为独立的Java应用程序存储简单数据

时间:2018-05-04 22:20:07

标签: java json search local

假设我有很多具有一些基本特征的人员名单:

马特,27岁,男性

安妮,49岁,女性

等...

我想在本地存储此数据,以用于不需要访问互联网的独立桌面应用程序。我当前的方法是将名称写入json文件,并在程序打开时将它们全部读入java中的Person类;但是,我不认为这是有效的,因为只有在有人进行搜索时才需要访问数据。

所以我考虑过一个简单的JSONparser,比如说searchNameInFile(“Matt”,“data.json”){return person;但是我不知道这是否是一种在效率方面存储数据的好方法。我很快就考虑了sqlite,但我只存储了一个数据表,并认为它可能有点过分。什么是存储和搜索本地数据的合适,有效的方法?

3 个答案:

答案 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

的任何内容