Модуль работы с базой данных

История переводов, избранные переводы, а также оффлайн переводы должны где-то храниться. Самое верное для этого решение, хранить все это в базе данных.

База данных в Android представлена в виде SQLite.Для удобной работы с БД был написан модуль, имеющий методы:

· reset () - Метод очистки БД

· insert() - Метод помещающий результат перевода в БД

· setIsFavorite() - Метод добавляющий/убирающий в избранное перевод

· getHistory() - Метод возвращающий историю всех переводов.

· getTranslate() - Метод возвращающий перевод для слова/предложения (Оффлайн переводчик)

· dbCount() – Метод возвращающий кол-во строк в БД

Листинг основных методов:

/**
* Метод помещающий результат перевода в БД
* @param result Результат перевода в виде TranslateResultModel
* */
public void insert(TranslateResultModel result)
{
SQLiteDatabase dataBase = getWritableDatabase(); /** Открывает экземпляр базы данных */

ContentValues contentValues = new ContentValues(); /** Формирую сроку */

contentValues.put(FROM_TEXT,result.from);
contentValues.put(TO_TEXT,result.to);
contentValues.put(LANG,result.lang);
contentValues.put(IS_FAVORITE,(result.favorite) ? 1 : 0);

dataBase.insert(TABLE_RESULTS,null,contentValues); /** Добавляю в бд */

dataBase.close();
}

/**

* Метод добавляющий/убирающий в избранное перевод

* @param id ID результата перевода в БД

* @param state Значение

* */

public void setIsFavorite(int id, boolean state)

{

SQLiteDatabase dataBase = getWritableDatabase();

Cursor c = dataBase.query(TABLE_RESULTS, null,"_id = " + id,null,null,null,null,null);

if(c.moveToFirst()) {

do {

ContentValues contentValues = new ContentValues();

int idFrom =c.getColumnIndex(FROM_TEXT);

int idTo = c.getColumnIndex(TO_TEXT);

int idLang = c.getColumnIndex(LANG);

contentValues.put(FROM_TEXT,c.getString(idFrom));

contentValues.put(TO_TEXT,c.getString(idTo));

contentValues.put(LANG,c.getString(idLang));

contentValues.put(IS_FAVORITE,(state) ? 1 : 0);

/** Обновляю БД */

dataBase.update(TABLE_RESULTS,contentValues,"_id = " + id,null);

}

while (c.moveToNext());

}

}

/**

* Метод возвращающий историю всех переводов.

* @param text Текст перевода. Может отсутствовать,но тогда будет возвращены все значения

* @param favorite В избранном

* */

public ArrayList<TranslateResultModel> getHistory(String text, boolean favorite)

{

ArrayList<TranslateResultModel> results = new ArrayList<>();

SQLiteDatabase dataBase = getReadableDatabase();

Cursor c = null;

String filter = '%' + text + '%';

if(favorite) {

if (TextUtils.isEmpty(text))

c = dataBase.query(TABLE_RESULTS, null, "_favorite=1", null, null, null, null, null);

else

c = dataBase.query(TABLE_RESULTS, null, "_from LIKE (?) OR _to LIKE (?) AND _favorite=1"

, new String[]{filter,filter}, null, null, null, null);

}

else{

if (TextUtils.isEmpty(text))

c = dataBase.query(TABLE_RESULTS, null, null, null, null, null, null, null);

else

c = dataBase.query(TABLE_RESULTS, null, "_from LIKE (?) or _to LIKE (?)"

, new String[]{filter,filter}, null, null, null, null);

}

if(c.moveToLast()) {

do {

int idFrom =c.getColumnIndex(FROM_TEXT);

int idTo = c.getColumnIndex(TO_TEXT);

int idLang = c.getColumnIndex(LANG);

int idFavorite = c.getColumnIndex(IS_FAVORITE);

int idID = c.getColumnIndex(KEY_ID);

results.add(new TranslateResultModel(c.getString(idFrom),c.getString(idTo),

c.getString(idLang),(c.getInt(idFavorite) == 1),c.getInt(idID)));

}

while (c.moveToPrevious());

}

dataBase.close();

return results;

}

/**

* Метод возвращающий перевод для слова/предложения (Оффлайн переводчик)

* @param text Текст перевода.

* @param lang Язык перевода

* */

public ArrayList<TranslateResultModel> getTranslate(String text, String lang)

{

ArrayList<TranslateResultModel> results = new ArrayList<>();

SQLiteDatabase dataBase = getReadableDatabase(); //Открывает экземпляр базы данных

Cursor c = null;

c = dataBase.query(TABLE_RESULTS, null,"_lang=\"" + lang + "\" and _from=\"" + text + "\""

, null, null, null, null, null);

if(c.moveToFirst()) {

do {

int idFrom =c.getColumnIndex(FROM_TEXT);

int idTo = c.getColumnIndex(TO_TEXT);

int idLang = c.getColumnIndex(LANG);

int idFavorite = c.getColumnIndex(IS_FAVORITE);

int idID = c.getColumnIndex(KEY_ID);

results.add(new TranslateResultModel(c.getString(idFrom),c.getString(idTo),

c.getString(idLang),(c.getInt(idFavorite) == 1),c.getInt(idID)));

}

while (c.moveToNext());

}

dataBase.close();

return results;

}

Наши рекомендации