public Item findItemById(int id) throws Exception {
    if (itemById == null) itemById = connection.prepareStatement(
      "SELECT * FROM ITEMS I1 INNER JOIN ITEMLIVRES L ON L.ITEM = I1.ID WHERE I1.ID = ? UNION " +
      "SELECT * FROM ITEMS I2 INNER JOIN ITEMDVDS M ON M.ITEM = I2.ID WHERE I2.ID = ? UNION " +
      "SELECT * FROM ITEMS I3 INNER JOIN ITEMDISQUES A ON A.ITEM = I3.ID WHERE I3.ID = ?"
    );
    itemById.setInt(1, id);
    itemById.setInt(2, id);
    itemById.setInt(3, id);
    ResultSet rs = itemById.executeQuery();
    if (rs.next()) {
      int type = rs.getInt(2);
      if (type == 1) {
        return new AlbumItem(rs);
      } else if (type == 2) {
        return new MovieItem(rs);
      } else if (type == 3) {
        return new BookItem(rs);
      } else {
        return new Item(rs);
      }
    } else {
      return null;
    }
  }