如何在android机房中使用distinct

时间:2017-12-14 13:59:28

标签: android sqlite android-room

我使用android room而不是sqllite。在我的应用程序数据库列中有多个记录。例如,我的列名是country。值是

  • 印度
  • 德国
  • 卡塔尔
  • 德国
  • 爱尔兰
  • 沙特
  • 美国
  • 德国
  • 非洲
  • 卡塔尔
  • 德国

我希望结果是

  • 印度
  • 德国
  • 卡塔尔
  • 爱尔兰
  • 沙特
  • 美国
  • 非洲

卡塔尔德国不止一次。我想整理单品。我使用过input。但它显示错误。我的代码如下所示。

CountryDao.java

SELECT DISTINCT name from country

Country.java

@Dao
public interface CountryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void addCountry(Country country);  
@Query("SELECT DISTINCT name from country")
public List<Country> getCountry();
}

它显示错误是 查询返回的列在com.android.db.Country中没有字段[id],即使它们注释为非null或原始。查询返回的列:[name]

AppDatabase.java

@Entity
public class Section {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String name;

    public Section(int id, String name){
    this.setId(id);
    this.setName(name);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

在我通过添加此代码获取数据的活动中。 ``List co = database.countryDao()。getCountry();

2 个答案:

答案 0 :(得分:3)

我通过改变得到了答案 我在 CountryDao.java 中更改了查询。将查询重写为

@Query("SELECT DISTINCT name from country")
public List<String> getCountry();

然后调用这样的活动。

 List<String> co = database.countryDao().getCountry();
    for(int i=0; i<co.size();i++) {
        Log.d(TAG, "country:" + co.get(i));
    }

问题在于我的代码按对象获取列表但我希望它在字符串中。感谢所有的朋友。

答案 1 :(得分:1)

List items = database.countryDao()。getCountry(); 字符串列表  在这里使用循环来迭代