public void remove(Dictionary dictionary, List<Vocable> vocables) {
    SQLiteDatabase db = getWritableDatabase();

    db.beginTransaction();
    try {
      if (dictionary.getId() != -1) {
        db.delete(
            VOCABLE_TABLE_NAME,
            DICTIONARY_ID_COL_NAME + " = ?",
            new String[] {"" + dictionary.getId()});
        db.delete(
            DICTIONARY_TABLE_NAME, ID_COL_NAME + " = ?", new String[] {"" + dictionary.getId()});
      }

      db.setTransactionSuccessful();
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage(), e);
    } finally {
      db.endTransaction();
    }
  }
  public void persist(Dictionary dictionary, List<Vocable> vocables) {
    SQLiteDatabase db = getWritableDatabase();

    db.beginTransaction();
    try {
      int dictionaryId = dictionary.getId();
      if (dictionaryId != -1) {
        ContentValues values = new ContentValues();
        values.put(PICTURE_COL_NAME, dictionary.getPicture());
        values.put(NAME_COL_NAME, dictionary.getName());
        int ret =
            db.update(
                DICTIONARY_TABLE_NAME,
                values,
                ID_COL_NAME + " = ?",
                new String[] {"" + dictionaryId});
        if (ret < 1) {
          // if dictionary was deleted meanwhile
          dictionaryId = -1;
        }
      }
      if (dictionaryId == -1) {
        dictionaryId = getDictionaryIdNext(db);
        addDictionary(db, dictionaryId, dictionary.getPicture(), dictionary.getName());
      }

      db.delete(
          VOCABLE_TABLE_NAME, DICTIONARY_ID_COL_NAME + " = ?", new String[] {"" + dictionaryId});

      int vocableId = getVocableIdNext(db);
      for (Vocable vocable : vocables) {
        addVocable(db, vocableId, dictionaryId, vocable.getPicture(), vocable.getWord());
        vocableId++;
      }

      db.setTransactionSuccessful();
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage(), e);
    } finally {
      db.endTransaction();
    }
  }