【问题标题】:Table-like data structures that can handle different data types? [closed]可以处理不同数据类型的类似表的数据结构? [关闭]
【发布时间】:2021-12-22 15:59:42
【问题描述】:

Java 中是否有任何数据结构和/或库允许创建本质上是具有字符串列/行标签和数字数据的数据表?它不需要显示给用户,只是我的程序用来有效访问数据的东西。

例如,如果我想访问账户 #123 从 2021 年 7 月 1 日起的销售收入数据。据我所知,目前我能想到的唯一方法是拥有一个非常复杂的带有字符串键的地图网络指的是最终值的列表。例如,我可以创建一个映射,其中包含引用帐户名称的字符串键,并将另一个映射作为值。该地图可以包含一个表示日期的字符串,其关联值为该日期的收入。

我想必须有一种更简单的方法来实现这一点。我唯一的另一个想法是从字面上创建一个 Excel 表 VIA java (Apache POI) 并将我所有的数字发送到那里以供参考,这似乎是程序的许多额外不必要的工作和处理。

我没有足够的数据来保证创建一个实际的数据库。我真的只需要足够灵活的小规模来处理不同的数据类型,这样我就可以拥有字符串标签。

也许有一种方法可以用二维数组做到这一点,我只是想不出怎么做,因为它们无法处理不同的数据类型。

我的最后一个想法是尝试实现一个番石榴表,但我不确定这样的事情是否适用于我的用例,目前正在对番石榴表的工作原理进行更多研究。

【问题讨论】:

  • 也许使用数据库?
  • 我没有足够的数据来保证数据库的安全,所以我最好避免这种情况,但我想如果其他方法都失败了,这是一个选择......
  • 考虑 sqlite
  • 其实这可能是我需要的。我想要一些我不需要要求该程序的每个用户都必须安装额外程序或设置数据库的东西,从外观上看,这不应该是 sqlite 的问题,所以这可能是一种方法,谢谢!

标签: java multidimensional-array types hashmap guava


【解决方案1】:

你已经定义了“relational database”

关系数据库中的表是行(记录)的命名集合,其值由列定义。这些列被命名,每一列都由你指定保存某种数据(数据类型)。

比如你说:

例如,我可以创建一个映射,其中包含引用帐户名称的字符串键,并将另一个映射作为值。该地图可以包含一个表示日期的字符串,其关联值为该日期的收入。

这听起来像一个account 表,其中有一列是文本类型的帐号(或VARCHAR),还有一列是客户名称。帐号列包含唯一标识每个帐户的值,因此我们将其称为主键。

一个相关的表可能被命名为valuation,其中有一列是日期类型,一列是用于估价金额的数字类型。您还将添加一个主键,可能是自动生成的序号。您将拥有一个外键,该外键是来自父级 account 的主键值的副本,即帐号。

作为 Java 开发人员,您对数据库引擎有多种选择。我建议使用 H2 数据库引擎,因为它很容易嵌入到您的应用程序中,因为 H2 是用 Java 编写的。而且它很容易上手,有很好的文档,并且正在积极开发中。但您也有其他选择,例如 Apache Derby、SQLite 等。要求对软件产品或库的具体建议在 Stack Overflow 上显然是无关紧要的,所以我就这样吧。


如果您搜索 Stack Overflow,您会发现我的多个答案以及完整代码,这些示例包括从 Java 中的 JDBC 代码使用 H2 的示例,包括实例化 DataSource、创建表、填充数据和运行查询以检索数据, 使用 try-with-resources 语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多