У меня есть следующий метод в моем классе базы данных:Simplify сырой SQL заявление
public ArrayList<HouseType> getAllHouseTypes(AdvertTypeEnum advertTypeEnum) {
String language = Locale.getDefault().getLanguage();
ArrayList<HouseType> houseTypes = new ArrayList<HouseType>();
// Get all house types for this advert type
String selectQuery = "select ht._id, htt." + language + ", htat.api_id " +
"from house_types ht, house_types_advert_types htat, house_types_translation htt " +
"where ht._id=htat.house_type_id and ht._id=htt.house_type_id and htat.advert_type=?";
Cursor cursor = database.rawQuery(selectQuery, new String[]{String.valueOf(advertTypeEnum.getValue())});
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
HouseType houseType = new HouseType();
houseType.setId(cursor.getInt(cursor.getColumnIndex(HouseTypesDBContract.HouseTypes.COLUMN_ID)));
houseType.setApiId(cursor.getInt(cursor.getColumnIndex(HouseTypesDBContract.HouseTypesAdvertTypes.COLUMN_API_ID)));
houseType.setName(cursor.getString(cursor.getColumnIndex(language)));
houseType.setAdvertTypeEnum(advertTypeEnum);
houseTypes.add(houseType);
} while (cursor.moveToNext());
}
cursor.close();
return houseTypes;
}
Что такое чистый способ для выполнения этого запроса в Android? Мне кажется, что замена имен столбцов на константу будет намного сложнее, поэтому мне интересно, есть ли лучший способ сделать это?
только оффтопический комментарий: '" ... htt. " + language + "..." 'выглядит как плохой дизайн таблиц ... house_types_translation не должен выглядеть как' house_types_translation (house_type_id, lang1, lang2, lang3, langN) ', а скорее' house_type_id (PK (house_type_id, language), value) '... теперь вы можете выбрать язык, где statment ... также вы используете« старые соединения »из tab1, tab2, где tab1.pk = tab2.fk' использует объединения, такие как' from tab1 inner join tab2 на tab1. pk = tab2.fk' – Selvin