为了将数据持久性添加到面向计费软件,我想知道在我的情况下保存和检索数据的最佳方法是什么。
我使用JavaFX的TableView填充自定义对象(包含许多字符串,整数,布尔值......),每个表示一个账单。用户必须能够即时添加,读取和编辑数据。一切都存储在本地,不需要使用云等。
我通常使用序列化来编写我的对象,但它是一种安全快捷的方式来存储大约10.000个自定义对象吗?
我应该使用XML,序列化,本地数据库(使用JavaDB?)还是......?
快速,我的意思是用户可以编写和编辑数据。启动应用程序时,加载时间很短,没问题。 通过安全,我不是指加密,它是安全的“数据不会丢失或损坏”的方式。
最终,如果有多个解决方案,为什么一个在另一个?
答案 0 :(得分:1)
如果被滥用/误解,任何持久性机制(平面文件,关系数据库,nosql)如果按设计使用或不安全都可以是安全的。你的问题是一个非常开放的问题,可以得到很多参与,或者非常轻松......这一切都取决于。
通常选择归结为:
我认为你没有从事专业项目并缺乏导师,所以我会先建议你先关注平面文件,然后选择某种类型的DB产品进行试验(H2非常好用于学习关系产品,以及Mongo或Redis,以便于学习NoSql产品之一)。
答案 1 :(得分:0)
您可以使用H2数据库(http://www.h2database.com/),这是存储数据的非常方便的方法,您可以使用嵌入式数据库,这看起来像
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
// add application code here
conn.close();
H2在名为test.db的用户主目录中创建文件测试。
答案 2 :(得分:0)
对象序列化是安全的。它并不是特别快,您必须非常小心如何对类进行更改以确保您可以始终反序列化。这是我对对象序列化的最大缺点。
XML(或JSON)也不错。有一些绑定技术,如JAXB,Jackson或Gson,它们允许您将对象无缝映射到XML或JSON。允许绑定使这些格式比对象序列化更容易使用,具有人类可读和可编辑的额外好处,但具有更冗长的成本(考虑文件压缩)。如果您的存储格式是一个巨大的XML文件,您还可以使用XPath搜索记录。
JavaDB(或H2或SQLite)的优点在于它实现了关系数据存储,因此您可以对数据执行SQL查询。使用适当的数据库管理大量记录要简单得多。你也可以节省磁盘空间。我会推荐这种方法。
是否有多个客户阅读这些文件?在这种情况下,为了安全起见,您必须实现某种文件锁定方案以防止数据损坏。您可以通过某种进程外数据管理来解决这个问题,使用轻量级服务器(如H2)或其中一个NoSQL数据存储区(如Mongo或Cassandra)。