sqlite 如何在Android房间中使用distinct

j5fpnvbx  于 2022-11-24  发布在  SQLite
关注(0)|答案(2)|浏览(167)

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

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

我要的结果是

  • 印度Name
  • 德国
  • 卡塔尔Name
  • 爱尔兰
  • 沙特
  • 美国
  • 非洲
    卡塔尔德国来了不止一次。我想整理出一个项目。我用了SELECT DISTINCT name from country。但它显示错误。我的代码如下所示。
    国家道.java
@Dao
public interface CountryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void addCountry(Country country);  
@Query("SELECT DISTINCT name from country")
public List<Country> getCountry();
}

国家/地区.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],即使它们被注解为非空或原始。查询返回的列:[姓名]

应用程序数据库.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;
}
}

在我的活动中,通过添加以下代码来获取数据。

voj3qocg

voj3qocg1#

我在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));
    }

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

inkz8wg9

inkz8wg92#

列表项=数据库.国家道().getCountry();字符串列表在此处使用for循环进行迭代

相关问题