2009-10-15 191 views
4

分配的作业问题需要存储用户选择的视频游戏的功能。这是一个小型的学校项目,我想知道存储信息的最佳方式是什么。该程序必须访问视频游戏预订,但我认为数据库对于这么小的任务有点夸张。视频游戏预订数据存储

你会怎么做?

+2

这是一个上下文相关的问题,它几乎总是取决于您试图存储的特定数据。 – Kai

回答

7

通常,对于小型学校项目,我发明了自己的平面文件格式。

通常它是一个简单的CSV文件,有一些键值对。

根据您需要保存XML的信息类型,可能是一种方法。另外,如果信息只需要在短时间内保存(应用程序的一次运行),并且保存的数据量相对较小,那么将所有信息保存在内存中肯定会使程序要快得多,而且通常更容易编写。

+0

我与jjnguy。这只是一个学校项目,而且OP的正确性在于使用数据库超过了顶端;平面文件非常适合这种事情。你可能也想看看Berkeley DB的这种东西;您可以使用它将您的对象序列化为一个持久性地图。 – Adamski

6

凯的权利,虽然管理视频游戏“预订”信息的好方法仍然是一个小型数据库(尝试sqlite)。我相信你会希望将预订信息与用户相关联,因此任何类型的关系都可以证明使用数据库是合理的。

+0

虽然各种文本文件可能会工作,但我认为使用数据库的额外工作非常少,我会这样做。 – djna

+0

HSQLDB和SQLite非常易于设置和使用;我也建议使用数据库。如果你在这个项目中使用平面文件,那么你最终可能最终会实现类似于数据库的东西,并且每个表都有一个平面文件 - 你将不会拥有由a提供的漂亮的API和查询功能数据库。 – rob

0

这取决于你在谈论什么类型的数据,有多少数据,你将如何访问和呈现数据以及是否需要对数据进行任何进一步的查询和分析。

我会说CSV或SQLite。

1

如果你是一个更具体一点,但它可能会有所帮助......

我认为分配是试图让你做的是了解,该方案将不知道数据类型和大小数据(行和列明智),直到运行时。

从你告诉我,我会尝试通过一个可变列表建模表。通用编程,以便您可以更换执行:

List> table = new ArrayList>();

这只是视频游戏?如果是这样,我会创建一个VideoGame对象,存储诸如名称,制造商,系统等字段,并将其放入可变数据结构和wallah!这一切都取决于你将在列表上执行的操作......你在搜索和排序?你关心检索时间吗?

如果您想要检索为O(1),或者以不准确的外行术语“关于一条指令”,请考虑使用Map。如果密钥是电子游戏的名字,它将返回到O(1)。如果有多个条目,请考虑使用List作为值。

我希望这不是太长和令人困惑,但请指出是否已知字段数或是否必须是完全通用的。如果它必须是完全通用的,只需使用数据库!它是通用的......或者如果你真的不想这样做,请使用我描述的第一种方法。

希望它有帮助。

2

我认为最简单的解决方案是序列化保存您的数据的对象,然后写入磁盘(选择任何文件扩展名让你开心)。简单地阅读文件,你已经得到了你的对象!

FileInputStream fis = new FileInputStream(filename); 
ObjectInputStream in = new ObjectInputStream(fis); 
Foo f = (Foo)in.readObject(); 

下面是对整个过程有很大底漆:Discover the secrets of the Java Serialization API

+1

很容易让你的未来自我与序列化的生活困难。 –

+0

的确,这不是一个“真正的”解决方案,但它对于有限的生命周期项目非常有效(阅读:学校项目)。 – perimosocordiae

+0

为什么它会通过序列化使事情变得困难? – GeoffreyF67

1

创建自己的文本文件(CSV等)
:轻松编辑
精读:你必须做所有的事情。并构成文件格式。你可能最终会写一个写得不好的数据库。严重改变对象可能是一个真正的痛苦。

序列化对象(二进制或XML)
:别的东西处理编组(二进制和XML构建,如果使用“豆”)
精读:版本之间的变化Java可能打破二进制格式化的序列化。 XML需要bean。

自定义XML文件
:XML是用Java很好的支持
精读:您将有可能最终通过现有的编组API和滚动自己(使用Java XML API的一个希望心惊肉跳)。然后你最终在文本文件(一个写得不好的数据库)的空间里。

嵌入式数据库
:SQL是性感。
Con:除非您已经知道SQL和/或正在使用ORM产品,否则ORM可能会有点痛苦。

我可能会去嵌入式数据库+ JPA。