您的位置:首页 > 移动开发 > Android开发

Android中使用OrmLite(二):复杂条件查询

2018-01-19 11:06 435 查看
在数据库中经常会使用到复杂的条件查询,来完成业务,下面学习下如何使用OrmLite进行复杂条件查询。
在默认情况下,Android只打印info级别的日志信息。在ormlite中提供了AndroidLog类来设置adb log的级别。为了更方便的查看OrmLite日志,查看增删改查的sql语句,我们可以在项目启动的过程中在adb控制台输入:adb shell setprop log.tag.ORMLite DEBUG即打印debug日志。
上接 Android中使用OrmLite(一):表创建及增删改查OrmLite要继承一个OrmLiteSqliteOpenHelper,通过OrmLiteSqliteOpenHelper实例的getDao方法可以获取一个Dao类,下边代码中mDao是Dao的实例,用来进行各种数据库操作。Dao类其中有个queryBuilder()方法可以得到builder来构造复杂查询语句。
假设有Person实体,对应数据库t_person表。通过该表来讲下述各种查询方法。
IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing
4GatesBillXuanwumen 10Beijing
WEHRE子句在SQL语句中,经常会用到where语句,where 进行条件筛选。dao.queryBuilder.()where()方法返回一个where对象,where中提供了很多方法来进行条件筛选,下边逐个讲where中的方法。
方法 :eq(columnName,value)    等于(=)equals使用示范:mDao.queryBuilder().where().eq("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` = 2结果:
2BushGeorgeFifth AvenueNew York
方法 :lt(columnName,value)    小于(<) less than使用示范:mDao.queryBuilder().where().lt("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` < 2结果:
1AdamsJohnOxford StreetLondon
方法 :gt(columnName,value)    大于(>) greater than使用示范:mDao.queryBuilder().where().gt("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` > 2结果:
3CarterThomasChangan StreetBeijin
方法 :ge(columnName,value)    大于等于(>=)greater-than or equals-to使用示范:mDao.queryBuilder().where().ge("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` >= 2结果:
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing
方法 :le(columnName,value)    小于等于(<=)less than or equals-to使用示范:mDao.queryBuilder().where().le("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` <= 2结果:
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
方法 :ne(columnName,value)    不等于(<>)not-equal-to使用示范:mDao.queryBuilder().where().ne("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` <> 2结果:
1AdamsJohnOxford StreetLondon
Carter Thomas Changan Street Beijing 
方法 :in(columnName,object…)     在指定列中匹配object数组所对应的值,返回匹配到的结果行集合in还有几个重载方法,需要的话可以去看文档或源码使用示范:mDao.queryBuilder().where().in("id", 1,2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` IN (1,2 )结果:
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
方法 :notIn(columnName,object…)     在指定列中匹配object数组所对应的值,返回没有匹配到的结果行集合notIn还有几个重载方法,需要的话可以去看文档或源码使用示范:mDao.queryBuilder().where().notIn("id",1,2).query();对应SQL:SELECT * FROM `t_person` WHERE `id` NOT IN (1 ,2 )结果:
3CarterThomasChangan StreetBeijin
方法 :like(columnName,pattern)    使用%通配符来匹配,指定行数据,返回匹配到的结果使用示范:mDao.queryBuilder().where().like("LastName", "A%").query(); 匹配A开头的LastName                  mDao.queryBuilder().where().like("LastName", “%s").query(); 匹配s结尾的LastName                  mDao.queryBuilder().where().like("LastName", “%art%").query(); 匹配中间为art的LastName对应SQL:SELECT * FROM `t_person` WHERE `LastName` LIKE 'A%'结果:
1AdamsJohnOxford StreetLondon
方法 :between(columnName,low,high)    获取指定范围内的结果使用示范:mDao.queryBuilder().where().between("id", 1, 2).query();   获取id是1到2之间的结果对应SQL:SELECT * FROM `t_person` WHERE `id` BETWEEN 1 AND 2结果:
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
方法and()or()用来组合上述where子语句。进行与,或操作。
方法 :and()    where子句与操作使用示范:mDao.queryBuilder().where().lt("id", 3).and().gt("id", 1).query();对应SQL:SELECT * FROM `t_person` WHERE (`id` < 3 AND `id` > 1 )结果:
2BushGeorgeFifth AvenueNew York
方法 :or()    where子句或操作使用示范:mDao.queryBuilder().where().eq("id", 1).or().eq("id", 2).query();对应SQL:SELECT * FROM `t_person` WHERE (`id` = 1 OR `id` = 2 )结果:
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
ORDER BY根据指定列名排序,降序,升序使用示范:mDao.queryBuilder().orderBy("id", false).query(); //参数false表示降序,true表示升序。对应SQL:SELECT * FROM `t_person` ORDER BY `id` DESC(降序)结果:
IdLastNameFirstNameAddressCity
 GatesJohnOxford StreetBeijing 
Carter Thomas Changan Street Beijing 
Bush George Fifth AvenueNew York 
Adams John Oxford Street London 
DISTINCT过滤指定列不重复数据行,重复的只返回一次。使用示范:mDao.queryBuilder().selectColumns("City").distinct().query();对应SQL:SELECT DISTINCT `City` FROM `t_person`结果:
City
London 
New York 
Beijing 
其中Beijing过滤掉了一个。
GROUP BY按照指定列分组使用示范:mDao.queryBuilder().groupBy("city").query();对应SQL:SELECT * FROM `t_person` GROUP BY `city`
Gates Thomas Changan Street Beijing 
Bush George Fifth AvenueNew York 
Adams John Oxford Street London 
offset Limitoffset跳过指定的行数limit限制获取指定行数使用示范:mDao.queryBuilder().offset(2).limit(2).query();  可以用来分页对应SQL:SELECT * FROM `t_person` LIMIT 2 OFFSET 2结果:
3CarterThomasChangan StreetBeijing
4GatesBillXuanwumen 10Beijing
Having等同于sql中的Having,针对分组数据,进行聚合函数(SUM, COUNT, MAX, AVG)运算。使用示范:mPersonList = mDao.queryBuilder().groupBy("City").having("SUM(id)>4").query()对应SQL:SELECT * FROM `t_person` GROUP BY `City` HAVING SUM(id)>4结果
4GatesBillXuanwumen 10Beijing
 countOf返回查询结果的总数使用示范:mDao.queryBuilder().countOf()对应SQL:SELECT COUNT(*) FROM `t_person`结果 4
iterator返回一个结果集的迭代器。使用示范:Iterator<Person> iterator = mDao.queryBuilder().iterator();queryForFirst返回所有行的第一行。使用示范:mDao.queryBuilder().queryForFirst();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: