【问题标题】:How do I execute "select distinct ename from emp" using GreenDao如何使用 GreenDao 执行“从 emp 中选择不同的名称”
【发布时间】:2016-02-25 18:24:46
【问题描述】:

如何使用 GreenDao 执行“从 emp 中选择不同的 ename”

我正在尝试使用 GreenDao 获取 sqlite DB 列的不同值。我该怎么做?任何帮助表示赞赏。

【问题讨论】:

    标签: greendao


    【解决方案1】:

    您必须使用原始查询,例如:

    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.PropertiesEmpDao.TABLENAME 用于始终具有由 greendao 生成的确切列名和表名。

    【讨论】:

    • @oli 编辑了这个答案并指出,这个代码需要同步,因为Cursor 不是线程安全的。但是由于Cursor c是在方法内部定义的,而不是提供给外界的,所以这个方法是线程安全的,因为每个线程都有自己的Cursor。请不要重新编辑同步主题,而是发表评论。附言恕我直言,编辑没有遵循the rules,不应该被接受,特别是因为这个答案被接受了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多