2

我目前正在编写一个客户端-服务器应用程序,以允许客户端从服务器请求数据。我正在考虑完全用本机 java 编写它,并且我正在使用文本和属性文件来完成我的大部分存储。

但是,我在试图找到一种存储以下内容的好方法时遇到了困难:

ID    Language from    Language to    Cost/100w    Comment
7101    English    Mandarin    $5.00    Outsource

现在你可能会想,他为什么不直接使用数组列表,或者直接将数据存储在另一个文本文件中呢?我已经考虑了这些选项,并且我看到了每个选项的缺点。

据我所知,使用数组列表我无法存储整数,我想使用以下命令查询数据:

What is the cost of <ID> translation of <integer> words?

如您所见,我需要将成本存储为整数,以便我可以将其用于求和。

对于文本文件,我只知道如何将数据存储在一行中,例如:

7101 English Mandarin $5.00 Outsource
7102 Greek Russian $12.00 -
etc. etc. etc. etc. etc

所以我不知道如何查询数据。

再一次,我不想最终用 MySQL 存储它并且不得不使用 JDBC 驱动程序,我希望整个应用程序在本机 java 中运行。

4

7 回答 7

5

您还可以使用 XML 文件来正确构建数据。在查询数据时,您可以使用 XPath。

XML 将使您有机会允许多种数据格式,包括数字和所有格式。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <row id="7101">
        <language-from>English</language-from>
        <language-to>Mandarin</language-to>
        <cost>5.00</cost>
        <comment><![CDATA[Some comment]]></comment>
    </row>
</data>

使用 XPath 查询数据:单词翻译的成本是多少?

/data/row[@id=7101]/cost/number()

然后用结果除以 100 得到一个单词的价格。

使用 JDOM2 之类的库操作 XML 应该是在公园里散步。

于 2012-08-22T21:01:22.027 回答
3

只需创建一个名为 TranslationType 的对象来为记录建模。它将具有 id、语言、...的属性

然后,您可以定义几种持久性类型,隐藏在一些智能接口后面,例如您可以随时交换使用的持久性实现,即使在运行时也是如此。潜在的持久性实现:简单的文本文件或二进制文件/序列化或 JDBC(其他 DB 类型)等。

于 2012-08-22T20:55:02.840 回答
2

您还可以使用Map (HashMap)带有您的 id 作为键和自定义对象Translation作为包含所有行数据的值。使对象实现Serializable并将您的地图序列化到磁盘。HashMap已经实现Serializable

于 2012-08-22T21:02:43.873 回答
1

谁说你必须使用 MySQL?您可以为此使用 SQLite。在每个主要操作系统上都有运行它的 JDBC 适配器。

于 2012-08-22T20:50:31.063 回答
1

将它们放在一条线上有什么问题?搜索包含<ID>在名为<integer>.txt的文件中的行

然后您可以编写代码来搜索以每这么多单词的数量命名的文件,然后在该文件中搜索您想要的特定 ID?

What is the cost of <7101> translation of <1000> words?会找到一个名为 1000w.txt 的文件并获取包含该 ID 的行,然后解析它的总数吗?

于 2012-08-22T20:57:10.933 回答
0

一种好的解决方案是将数据存储为 XML 文件。为数据文件和要为您的问题存储的数据创建和定义 XML 模式,在这种情况下,它是

ID 语言从语言到成本/100w 评论 7101 英语普通话 $5.00 外包

为数据文件定义模式可以让您更好地控制并强制执行适用于问题陈述的明确定义的类型。

您可以选择使用 JAX-B 或 XML-Beans 库从定义的模式生成类类型。根据应用程序的要求,读取 XML 数据解组和编组流或对象。

于 2012-08-22T21:03:29.017 回答
0

您可以将最定义的 int 数据类型存储在数组中。只是一个例子:

    int[] arrayname = new int[n]
于 2014-09-19T21:45:47.390 回答