我的数据库类中有以下方法:
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 :(得分:0)
对列名使用定义的常量(而不是在字符串中进行硬编码)。 如果您在多个位置使用列名,强烈建议这样做。即使是其他建议也是如此。
对字符串进行硬编码没有错。但是使用带有连接常量的字符串,您可以在多行中更好地格式化查询以提高可读性。
由于您正在查询多个表已加入,因此原始查询是正确的方法。
建议使用常量,因为这些列名是 一般在多个地方提到。在发布之前,如果你是 计划更改列名称,它变得非常容易。