HSQLDB数据库代替序列化

HSQLDB database instead of serialization

我正尝试在 Java 中编写一本食谱。我创建了一个 Object 'Recipe' 具有标题、图片、注释等属性,并将所有食谱放入 ArrayList 中。直到现在,我只是序列化了 ArrayList,以便以后可以轻松地将它加载到我的程序中。就像你想的那样,如果有数百个菜谱并且每个菜谱都有图片,那么序列化需要相当长的时间。所以我想到了一个 HSQLDB 数据库,但有两个问题要问我。

可以将图像存储在 VARBINARY 或 BLOB 类型的列中。 VARBINARY 类型适用于高达几千字节的低分辨率图像。如果图片一般比较大,BLOB比较suitable.

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

如果您所做的只是显示菜谱,您可能不需要 Recipe 对象,菜谱的简单形式只是数据库中的一行 table。您可以只检索该行作为 ResultSet 并使用 getXXX(n) 方法来获取要显示的每个属性。

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

每个食谱可以有多种成分。所有可能的成分都可以存储在第二个 table 中,每种成分一行,例如橄榄油、橄榄、生菜、番茄等。第三个 table 每次使用一行每个食谱中的成分。例如,一种特定的沙拉在此 table 中有一排是番茄,一排是橄榄油。

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