【问题标题】:how to use distinct in android room如何在 android room 中使用 distinct
【发布时间】:2017-12-14 13:59:28
【问题描述】:

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

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

我想要的结果是

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

卡塔尔德国来了不止一次。我想整理出单个项目。我用过SELECT DISTINCT name from country。但它显示错误。我的代码如下所示。

CountryDao.java

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

Country.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;
    }

}

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

AppDatabase.java

@Database(entities = {Country.class}, version = 5, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase{
private static AppDatabase INSTANCE;
public abstract ClassDao classDao();
public abstract SessionDao sessionDao();
public abstract SectionDao sectionDao();
public static AppDatabase getDatabase(Context context) {
    if (INSTANCE == null) {
       INSTANCE =
                Room.databaseBuilder(context, AppDatabase.class, "edumiadatabase").fallbackToDestructiveMigration()
                        .build();
    }
    return INSTANCE;
}

public static void destroyInstance() {
    INSTANCE = null;
}
}

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

【问题讨论】:

  • @CommonsWare 我已经编辑了我的代码。请检查一下。
  • @pskink 我已经编辑了我的代码。请检查一下。
  • 您没有Country 课程的代码。您有 Section 类的代码。

标签: android sqlite android-room


【解决方案1】:

我通过修改得到了答案 我已经更改了 CountryDao.java 中的查询。将查询重写为

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

然后像这样调用activity。

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

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

【讨论】:

  • 答案和问题中的查询是一样的!你做了什么不同的事情?
  • 原来是List&lt;Country&gt; getCountry();,然后改成List&lt;String&gt; getCountry();。我认为它返回 List 因为用 name 指定了一个字段
【解决方案2】:

列表项 = database.countryDao().getCountry(); 字符串列表 在此处使用 for 循环进行迭代

【讨论】:

  • 是的,id 是主键
  • 您正在尝试返回国家/地区对象列表,但您的 sql 查询是针对字符串列表pastebin.com/8UsfdeSK
  • 你能告诉我使用 distinct 的查询吗
  • 您的查询是正确的,您的目标是获取名称字符串列表,但您的代码似乎是对象列表,这是错误检查我的 pastebin
  • 我想要这份清单。如何在列表上打印。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多