2014-11-13 2 views
0

У меня есть следующий метод в моем классе базы данных: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? Мне кажется, что замена имен столбцов на константу будет намного сложнее, поэтому мне интересно, есть ли лучший способ сделать это?

+0

только оффтопический комментарий: '" ... 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

ответ

0

Используйте определенные константы для имен столбцов (вместо жесткого кодирования внутри строк). Настоятельно рекомендуется, если вы используете имена столбцов в нескольких местах. Даже в противном случае это рекомендуется.

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

Поскольку у вас есть запрос с соединенными несколькими таблицами, необработанный запрос является правильным способом.

Константы рекомендуются главным образом потому, что эти имена столбцов обычно упоминаются в нескольких местах. и до выпуска, если вы используете , чтобы изменить имена столбцов, становится очень легко.

Смежные вопросы