代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

在Java桌面应用程序中保存数据的最佳方法是什么?

  •  10
  • Allain Lalonde  · 技术社区  · 16 年前

    在我的桌面应用程序中,我有一个Java对象的大树,我试图决定将它们作为文件保存到文件系统的最佳方法。

    我的一些想法是:

    • 使用DataOutputStream滚动我自己的序列化程序 :这将使我最大限度地控制文件中的内容,但代价是微观管理。

    • 使用ObjectOutputStream及其各种相关类的直接旧序列化 因为我发现数据很脆弱,所以我不卖它。更改任何对象的结构都会破坏其序列化实例。所以我陷入了一个可怕的版本控制噩梦中。

    • 串行化 :它没有那么脆弱,但是直接序列化的速度要慢得多。它可以在我的程序之外进行转换。

    • 贾瓦德 :我考虑过这一点,因为我很乐意编写JDBC应用程序。这里的区别在于,只有在打开或保存文件时,数据库实例才会保持不变。不漂亮,但是…如果以后需要,它确实适合迁移到中央服务器体系结构,并且它引入了以更简单的方式查询数据模型的可能性。

    我很好奇别人怎么想。我希望我错过了一些比上面那些更明显、更简单的方法。


    以下是从以下答案中选择的更多选项:

    • 对象数据库 -比ORM方法的基础架构要少得多,执行速度比XML方法快。感谢阿库
    6 回复  |  直到 16 年前
        1
  •  3
  •   aku    16 年前

    db4objects 可能是最好的选择

        2
  •  5
  •   Brian Matthews    16 年前

    我会选择你最后的选择JavaDB Derby )使用对象关系层 Hibernate iBatis . 使用前三个问题意味着您将花费更多的时间构建数据库引擎,而不是开发应用程序功能。

        3
  •  4
  •   Paul Tomblin    16 年前

    把Hibernate看作是连接数据库的一种简单方法。

        4
  •  4
  •   Jay Stramel    16 年前

    根据我的经验,您最好使用嵌入式数据库。SQL虽然不够完美,但通常比设计性能良好且可靠的文件格式容易得多。

    我没有用JavaDB,但我很幸运 H2 SQLite . sqlite是一个C库,这意味着在部署方面需要做更多的工作。但是,它的好处是将整个数据库存储在单个跨平台库中。基本上,它是一种预打包的通用文件格式。sqlite非常有用,我甚至开始使用它来代替脚本中的文本文件。

    如果您正在处理一个小的持久性问题,请小心使用Hibernate。它增加了大量的复杂性和库开销。如果您使用大量的表,Hibernate非常好,但是如果您只需要几个表,它可能会很麻烦。

        5
  •  1
  •   Tim Williscroft    16 年前

    来自codehaus.org的xstream

    XML序列化/反序列化基本上不需要编码。 您可以使用注释来调整它。 在我工作的两个项目中工作得很好。

    查看我的用户组演示文稿 http://cjugaustralia.org/?p=61

        6
  •  0
  •   Marcio Aguiar    16 年前

    我想这取决于你需要什么。让我们看看选项:

    1)描述的iMediatelly!我连理由都没有。:)

    2)如果您需要一个简单、快速、一种方法的持久性,请坚持使用它。它将按原样保存完整的数据图!当心您将要维护持久化对象多长时间。正如您自己指出的,版本控制可能是一个问题。

    3)慢于(2),需要额外的代码,用户可以编辑。我只会使用它,数据应该由另一种语言的客户机使用。

    4)如果您仍然需要查询您的数据,请使用DB解决方案。

    嗯,我想你已经回答了你的问题:)