有没有办法用greenDao按相关表格中的字段排序? 比如我有一张汽车桌和一张司机桌。 每辆车都有一个司机。 现在我想查询(例如蓝色)汽车并按驱动程序的名称排序

===============>>#1 票数:5

在QueryBuilder中,有一些方法可以指定排序顺序。 寻找以“order ...”开头的方法,例如orderAsc(Property)。

===============>>#2 票数:5

我现在也和GreenDao一起玩,希望我对第一个答案中的评论有所补充,并且greenDao文档查询部分中的描述有所帮助。

以下代码片段应该可以工作(没有测试它:)):

Query query = carsDao.queryRawCreate(   ", driver D WHERE T.COLOR='blue' AND T.DRIVER_ID=D._ID ORDER BY D.NAME ASC");

这在内部创建了一个与此类似的SQL:

SELECT T.'id', T.'name', T.'color', T.'driver_id'
FROM cars T, driver D
WHERE T.COLOR='blue'
AND T.DRIVER_ID=D._ID
ORDER BY D.NAME ASC

该语句的第一部分是由queryRawCreate方法为您创建的,其余部分是传递给queryRawCreate的自定义sql语句。

如果你想知道JOIN语句在哪里,请看这个问题

===============>>#3 票数:1

您可以将QueryBuilders与由greendao ORM生成的Dao一起使用。

在使用之前定义

 ProductDao productDao;
 DaoSession daoSession;

您应该将DaoMaster和DaoSession放在您的应用范围内。 在扩展Application的类的onCreate()内部。

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplicationContext(), "app-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
daoSession = new DaoMaster(db).newSession();

使用前初始化

 daoSession = ((MyApplication) getApplication()).getDaoSession();
 productDao = daoSession.getProductDao();

您可以对结果进行排序,以显示在活动中。

private void refreshProducts() {
        switch (sorted_by){
            case SORT_BY_DATE:
                cardItems = productDao.queryBuilder().orderAsc(ProductDao.Properties.Id).list();
                setupRecyclerView();
                break;

            case SORT_BY_PRICE:
                cardItems = productDao.queryBuilder().orderDesc(ProductDao.Properties.Price).list();
                setupRecyclerView();
                break;

            case SORT_BY_POPULARITY:
                cardItems = productDao.queryBuilder().orderDesc(ProductDao.Properties.Name).list();
                setupRecyclerView();
                break;
        }
    }

===============>>#4 票数:0

使用QueryBuilder.orderRaw()和Join.getTablePrefix()轻松解决问题

我的示例代码:

QueryBuilder.LOG_SQL = true;//Enable to see SQL result

  QueryBuilder<Item> query = daoSession.queryBuilder(Item.class);
  Join itemWithCollection = query.join(JoinItemWithCollection.class,
      JoinItemWithCollectionDao.Properties.ItemId);
  String joinedTable = itemWithCollection.getTablePrefix();
  Join collection = query.join(itemWithCollection, JoinItemWithCollectionDao.Properties.CollectionId,
      Collection.class, CollectionDao.Properties.Id);
  String orderCol = JoinItemWithCollectionDao.Properties.SomeOrderCol.columnName;
  collection.where(CollectionDao.Properties.Key.eq(collectionId));
  query.orderRaw(joinedTable+".\""+orderCol+"\" DESC");
  query.limit(limit);
  query.offset(from);

  List<Item> results = query.list();

  ask by ligi translate from so

未解决问题?本站智能推荐:

1回复

在相关对象中具有LIKE子句的GreenDao查询

如何使用绿岛查询来查询在相关对象中带有LIKE字符串的对象? 我构造的这种查询行不通吗? 有什么建议可以管理查询相关字段属性的查询吗? MainDao拥有InfoDao的密钥 我想我想做这样的事情:
2回复

greenDAO中的enableWriteAheadLogging()

创建DaoMaster之前是否需要在数据库上调用enableWriteAheadLogging()? 多线程处理时这是否有帮助?DaoMaster是否可以自动处理? 我需要从多个线程进行非阻塞读取。
1回复

Android Greendao仅更新实体中的特定字段

我一直在寻找解决我的问题的方法,但没有成功。 我有一个应用程序,在其中我从不同的服务接收数据库中特定实体的信息,因此我正在使用greenDAO的insertOrReplace方法,因此只要该实体已经存在于数据库中,它就会被更新而不是重新创建。 到现在为止还挺好。 问题是..例如
1回复

Android Greendao-分组和排序

我在项目中使用GreenDAO 。 我有一个包含所有消息的聊天表。 我想按chat_id ,并按消息的时间戳按降序对消息进行排序。 因此,我要获取的列表是包含用户每次聊天的最新消息的列表。 这是我正在使用的代码: 但上面的代码仍然为我提供了一个列表,其中包含每个聊天的
1回复

通过Greendao中的密钥更新

如何使用键(不是主ID键)更新表? 我有一个客户表,正在获取更新或创建的客户数据。 因此,对于新创建的数据,我使用的是insertOrReplace方法,该方法使用对象插入数据。 但是对于更新行,据我所知,我必须使用我拥有的密钥来获取行,然后更新行。 不获取行就不可能做到这一点,
1回复

如何从数据库加载所有字段并使用GreenDao对结果进行排序?

我想用greendao从sqlite数据库加载所有实体并对结果进行排序。 我可以使用loadAll加载所有实体,但这并不能保证对结果列表的排序。
1回复

GreenDao比较条件中的日期

我在使用greendao时遇到问题。 到目前为止效果很好。 但是,我尝试比较日期时认为存在问题。 以下是情况 我有一张桌子叫它OrderTable 。 我有两个日期作为列, OrderDate和DeliveryDate 。 现在,我想选择DeliveryDate为Null或Ord
3回复

如何在GreenDAO中映射Enum

我刚刚开始使用greenDAO。 如何添加枚举属性? 我想到的是:使用实体的addIndex属性。 这是正确的方法吗? 目的:我希望引用以下集合中的shirtSize:{XS,S,M,L,XL,XXL}
2回复

需要在greendao中的联接查询

有人可以创建一个greendao(或android sqllite)查询来获得与下一个sql查询相同的结果吗? 从MAINCATEGORYS_TO_LISTINGS中选择b。*,a.MAIN_CATEGORY_ID,在b._id = a.MAIN_CATEGORY_ID上加入APMAIN_
2回复

CURD操作中的GreenDAO异常

我对GreenDAO非常陌生。 我已经在GitHub提供的Project中实现了一些代码。在github中,有一个默认的数据库“ NOTE”,我正在尝试在其中创建一个新列以插入图像。这是在启动器活动中插入数据的代码。 还有这个Note.java类 这在NoteDAO.java类