java - 从没有数据库的 JavaFX 应用程序保存数据

标签 java database serialization javafx

不幸的是,我找不到关于这个主题/我的问题的任何内容。我们开始吧:

我正在为我的一个 friend 构建一个 JavaFX 业务应用程序。不幸的是,我没有任何可能连接到数据库。我希望应用程序从文件加载保存状态。该应用程序包含一个包含客户端的列表,并且客户端具有一些特定的属性。我不想将其硬编码为 .prop 或 .txt 文件,因为我确信有不同的方法,不是吗?

提前致谢,感激不尽!

最佳答案

将数据持久化到本地存储的多种选择。确切的选择取决于您的需要。您没有描述足够的细节来提出具体建议。

这是一个可能性列表,大致按照数据复杂性的递增顺序。

文本文件

如果您有少量简单数据,请保存到文本文件。您可以将每个部分存储在一个单独的文件中,或合并到一个文件中。最新版本的 Java 有新的类,使这比以往任何时候都更容易。参见 Oracle Tutorial .

逗号分隔和制表符分隔

对于结构化数据集,写入 comma-separated values (CSV) 中的文本文件或 tab-delimited values .例如,一个人员列表,每个人都有行,姓名、电话号码和电子邮件地址列。

虽然读/写此类文件很容易让您自己编程,但我建议使用已建立的库来消除苦差事、避免错误并为您节省一些时间。有一些这样的库是用 Java 编写的。

我最喜欢的是 Apache Commons CSV项目。这个库可以轻松完成读取/写入此类文件的工作。尽管名称如此,但该库支持制表符分隔格式和逗号分隔格式。我在 Stack Overflow 上写了一些答案,展示了如何使用这个库,你可以看到 here , here , 和 here .

顺便说一下,普通的旧ASCII定义一个 few character positions explicitly for delimiting在数据文件中,有四个级别的分组(文档、组、记录/行和字段)。 Unicode,当然是inherits these from ASCII as code points .我很困惑为什么这些仍然如此晦涩难懂并且很少使用。对我来说似乎比使用数据有效负载中可能存在的逗号和制表符更合乎逻辑。

序列化

您可以写出存储在对象中的数据值。这称为序列化。 Java 有一个内置的序列化工具,但一定要研究细节。

为了更简单地写出一个对象的值,然后再读回它们以重建一个对象,我喜欢使用 Simple XML Serialization项目。这适用于相对简单的需求,并且适用于您希望类的结构来驱动确定要编写什么的过程的情况。

Java 具有其他内置和第三方的 XML 绑定(bind)工具。它们的灵 active 要强大得多。当您想以严格的方式定义和验证 XML 结构时,例如定义 XML DTD,它们特别有用。或 XML Schema用于验证数据,甚至可能生成用于表示数据的 Java 类。

嵌入式数据库

对于更复杂的数据,使用嵌入式关系数据库。

SQLite数据库与许多平台捆绑在一起。这是一个基于 C 的库,而不是纯 Java。顾名思义,SQLite 确实非常“精简”,缺乏严格的数据类型和许多其他常见的数据库功能。 SQLite 旨在替代编写文本文件,而不是作为更严肃的数据库的竞争对手。如果您的需求符合其功能的最佳点,那么它就是一款很棒的产品。

我对嵌入式数据库的首选是 H2 Database Engine .内置纯Java。可以在您的应用程序内运行,或作为服务器单独运行(您选择)。具有复杂的关系数据库功能。已经存在多年,经常更新,而且很旧。主要作者在该领域有丰富的经验。

关于java - 从没有数据库的 JavaFX 应用程序保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089079/

相关文章:

sql - 我应该转向 NoSQL 吗? (大数据)

wcf - System.Runtime.Serialization.DataContractAttribute 在命名空间 System.Runtime.Serialization 中不存在

java - JTextField 固定高度

java - 如何在java中刷新dns

html - 在 html 表单中,您如何拥有颜色选择器以及如何将其发送到数据库

database - 做或不做:将图像存储在数据库中

java - 内置显示有效数字的方法

java - Android - DialogFragment 上的 CountDownTimer

python - 如何序列化作为 XML Exporter 中的项目列表的 Scrapy 字段

ruby-on-rails - Rails 中的 ActiveModel::Serializer - JSON 结果中忽略的序列化程序方法