【发布时间】:2016-02-25 18:24:46
【问题描述】:
如何使用 GreenDao 执行“从 emp 中选择不同的 ename”
我正在尝试使用 GreenDao 获取 sqlite DB 列的不同值。我该怎么做?任何帮助表示赞赏。
【问题讨论】:
标签: greendao
如何使用 GreenDao 执行“从 emp 中选择不同的 ename”
我正在尝试使用 GreenDao 获取 sqlite DB 列的不同值。我该怎么做?任何帮助表示赞赏。
【问题讨论】:
标签: greendao
您必须使用原始查询,例如:
private static final String SQL_DISTINCT_ENAME = "SELECT DISTINCT "+EmpDao.Properties.EName.columnName+" FROM "+EmpDao.TABLENAME;
public static List<String> listEName(DaoSession session) {
ArrayList<String> result = new ArrayList<String>();
Cursor c = session.getDatabase().rawQuery(SQL_DISTINCT_ENAME, null);
try{
if (c.moveToFirst()) {
do {
result.add(c.getString(0));
} while (c.moveToNext());
}
} finally {
c.close();
}
return result;
}
当然,您也可以在查询中添加一些过滤条件。
静态字符串SQL_DISTINCT_ENAME用于性能,这样就不必每次都构建查询字符串。
EmpDao.Properties 和 EmpDao.TABLENAME 用于始终具有由 greendao 生成的确切列名和表名。
【讨论】:
Cursor 不是线程安全的。但是由于Cursor c是在方法内部定义的,而不是提供给外界的,所以这个方法是线程安全的,因为每个线程都有自己的Cursor。请不要重新编辑同步主题,而是发表评论。附言恕我直言,编辑没有遵循the rules,不应该被接受,特别是因为这个答案被接受了!