星空网 > 软件开发 > 操作系统

Android免坑指南(一)Sugar与SQLite

最近在Android手机开发中使用了ORM框架Sugar1.4,节省了大量代码,同时也遇到不少麻烦,记录如下:

1. 使用group by将查询结果转换为POJO对象

在Sugar1.4中,可以使用如下代码将查询结果转换为POJO对象。

List<POJO> results = SugarRecord.findWithQuery(POJO.class, sql);

1.1. 额外的ID字段

该方**调用SugarRecord类的inflate方法,如下:

 1   private static void inflate(Cursor cursor, Object object, Map<Object, Long> entitiesMap) { 2     List<Field> columns = ReflectionUtil.getTableFields(object.getClass()); 3     if (!entitiesMap.containsKey(object)) { 4       entitiesMap.put(object, cursor.getLong(cursor.getColumnIndex(("ID")))); 5     } 6  7     for (Field field : columns) { 8       field.setAccessible(true); 9       Class<?> fieldType = field.getType();10       if (isSugarEntity(fieldType)) {11         try {12           long id = cursor.getLong(cursor.getColumnIndex(NamingHelper.toSQLName(field)));13           field.set(object, (id > 0) ? findById(fieldType, id) : null);14         } catch (IllegalAccessException e) {15           e.printStackTrace();16         }17       } else {18         ReflectionUtil.setFieldValueFromCursor(cursor, field, object);19       }20     }21   }

注意第4行代码,会在entitiesMap中缓存查询结果与ID,所以在构造查询语句sql的时候,需要额外增加一个ID字段。

1.2. SQLite大小写敏感问题

在Sugar官方文档中,类字段通过下划线命名法映射到数据表的对应列(见上代码12行NamingHelper)。

查看NamingHelper源码,其返回结果为大写,但官方示例的条件查询中全部都使用的小写,由于SQLite一般类型列大小写不敏感,所以在一般情况下是没有问题的。

但是!当在SQL中使用AS语法重命名后,就大小写敏感了!

所以在group by查询中,必须将汇总列重命名为大写的下划线命名,才能在Sugar中映射到POJO实例的对应列。

1.3. SQLite不支持IF语法

SQLite不支持IF语法,但可以使用CASE WHEN语法代替。

 

CASE WHEN first conditional expression THEN column valueWHEN second conditional expression THEN column valueWHEN third conditional expression THEN column valueENDCASE WHEN conditional expression THEN column valueELSE default column valueEND

 




原标题:Android免坑指南(一)Sugar与SQLite

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

海外众筹——Kickstarter热门产品参考:https://www.ikjzd.com/articles/136329
中东垂直母婴电商平台Sprii现金流出问题,即将清算:https://www.ikjzd.com/articles/136330
湖南将启动跨境电商综合服务中心建设试点:https://www.ikjzd.com/articles/136331
亚马逊优惠券如何设置?:https://www.ikjzd.com/articles/136332
2021年日本公众假期公布:https://www.ikjzd.com/articles/136333
今年大火的“宅经济”品类,2021年还有哪些“爆品”可做?:https://www.ikjzd.com/articles/136334
怎样做出一个有利可图的SaaS产品?:https://www.kjdsnews.com/a/1836639.html
【再放信号】美国Etsy即将放开中国卖家入驻,官方邮件你收到了吗?:https://www.kjdsnews.com/a/1836640.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流