简化原始sql语句

时间:2014-11-13 12:29:23

标签: android sqlite

我的数据库类中有以下方法:

 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中执行此查询的干净方法是什么? 在我看来,用常量替换列名会使它变得更加复杂,所以我想知道是否有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

对列名使用定义的常量(而不是在字符串中进行硬编码)。 如果您在多个位置使用列名,强烈建议这样做。即使是其他建议也是如此。

对字符串进行硬编码没有错。但是使用带有连接常量的字符串,您可以在多行中更好地格式化查询以提高可读性。

由于您正在查询多个表已加入,因此原始查询是正确的方法。

  建议使用

常量,因为这些列名是   一般在多个地方提到。在发布之前,如果你是   计划更改列名称,它变得非常容易。