HSQLDB数据库而不是序列化

时间:2017-11-02 19:22:19

标签: java image serialization hsqldb

我正在尝试用Java编写一本Cookbook。我用标题,图片,注释等属性创建了一个Object'Recipe',并将所有食谱放在ArrayList中。到目前为止,我只是序列化了ArrayList,以便以后可以轻松地将它加载到我的程序中。正如您可能认为的那样,如果有数百个食谱并且每个食谱都有图片,那么序列化需要相当长的时间。所以我想到了HSQLDB数据库,但对我来说有两个问题。

  • 是否可以将图片保存到HSQLDB数据库?
  • 从一开始就从数据库加载所有配方并将它们放入Recipe的ArrayList或者我应该更高效 只要在显示它们时加载每一个食谱?如果是这样,我甚至需要一个食谱对象anmyore?如果它们具有相同的属性,数据库中的单行不会替换Recipe的实例吗?

1 个答案:

答案 0 :(得分:0)

可以将图像存储在VARBINARY或BLOB类型的列中。 VARBINARY类型适用于高达几千字节的低分辨率图像。如果图像通常较大,则BLOB更合适。

您可以非常有效地按需检索每个食谱。

如果你正在做的只是显示配方,你可能不需要配方对象,配方以简单的形式只是数据库表中的一行。您可以将行检索为ResultSet,并使用getXXX(n)方法获取要显示的每个属性。

使用数据库的另一个好处是可以存储每种食谱的成分或属性列表,如卡路里,并能够根据这些属性搜索和显示食谱列表。

每种食谱都可以含有多种成分。所有可能的成分都可以存储在第二个表中,每个成分对应一行,如橄榄油,橄榄油,生菜,西红柿等。每个配方中每种成分的使用,第三个表用于一行。例如,特定的沙拉在这张桌子上有一排用于番茄,一排用于橄榄油。

ingredients
  ingredient_id  name
  6              olive oil
  ...            ... 
  26             tomato 


ingredient_use
  recipe_id, ingredient_id
  12         26
  12         6
  ...        ...

您使用

等连接
SELECT * FROM ingredients JOIN ingredient_use USING (ingredient_id) WHERE recipe_id = 12