Java - 在组合框中使用数据库中的两个值

时间:2016-07-10 18:33:16

标签: java swing sqlite

我正在开发一个简单的Java程序来从数据库中检索信息并将其显示给用户,我想获取某些表的信息并将其添加到组合框(或者无论什么工作)但仍然能够在我选择一个选项时获取id。

例如,让我说我有一个这样的表

people table

id  name
---------
1   Roger
2   Mike
3   Bob

我想要做的是检索所有名称以在组合框中显示它们,如果我选择让我们说“迈克”。从选项列表中,我希望程序能够为我提供Mike的ID,以便我可以在另一个选择中使用它。可能吗?如果没有,有没有更好的方法来做我想做的事情而不必在选择中使用该名称?我已经有了一种方法来获取我需要的信息并将其放入hashmap中,我不知道我是否可以以某种方式使用它。

另外,另一个相关的问题是,这种程序的更好的做法是什么?要从数据库中检索信息并使其始终可用而无需再次读取数据库?或者只读取数据库中我目前需要的信息并且每次都这样做?

编辑: 我正在使用Swing GUI

1 个答案:

答案 0 :(得分:4)

哪个GUI库?摇摆?如果是,那么:

  • 创建一个包含名称String(或Strings)的类,并且有一个id字段,可能是一个int,但最好也是一个String(包含数字字符)。假设我们将此类称为NameAndId,并确保它具有足够的getter方法,equals,haschCode等等。
  • 一个选项是创建一个JTable,其行是上面类的对象,其模型(这里是一个从AbstractTableModel扩展而来)保存ArrayList<NameAndId>个对象NameAndId类型。然后,JTable的一列将显示来自id字段的数据,以及一个(或更多)用于名称和其他字段的数据。
  • 另一种选择是创建JComboBox<NameAndId>,给它一个DefaultComboBoxModel<NameAndId>,然后使用NameAndId实例填充此模型。如果您只想显示名称,那么您有两个选项之一:给NameAndId一个public String toString()方法,显示您希望JComboBox显示的内容。这是最简单的解决方案,但不会被专家推荐,因为它迫使您更改模型类以使其在视图或显示类中工作,这是应该避免的。
  • 另一个选择是执行上述操作,但为JComboBox提供一个自定义渲染器,一个只显示它所持有的NameAndId对象的名称信息。这是两者中最强大的解决方案。有关详情,请务必查看renderer section of the JComboBox tutorial

请注意,由于您使用过的模型,无论是TableModel还是ComboBoxModel,都拥有NameAndId的对象,因此无论选择哪个项目都将保存您需要的所有信息,即使它没有& #39; t显示GUI中的所有信息。