android studio ormLite复杂条件查询

OrmLite要继承一个OrmLiteSqliteOpenHelper,通过OrmLiteSqliteOpenHelper实例的getDao方法可以获取一个Dao类,下边代码中mDao是Dao的实例,用来进行各种数据库操作。Dao类其中有个queryBuilder()方法可以得到builder来构造复杂查询语句。

假设有Person实体,对应数据库t_person表。通过该表来讲下述各种查询方法。

Id LastName FirstName Address City 
1 Adams John Oxford Street London 
2 Bush George Fifth Avenue New York 
3 Carter Thomas Changan Street Beijing 
4 Gates Bill Xuanwumen 10 Beijing

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 
结果: 
2 Bush George Fifth Avenue New York

方法 :lt(columnName,value) 小于(<) less than 
使用示范:mDao.queryBuilder().where().lt(“id”, 2).query(); 
对应SQL:SELECT * FROM t_person WHERE id < 2 
结果: 
1 Adams John Oxford Street London

方法 :gt(columnName,value) 大于(>) greater than 
使用示范:mDao.queryBuilder().where().gt(“id”, 2).query(); 
对应SQL:SELECT * FROM t_person WHERE id > 2 
结果: 
3 Carter Thomas Changan Street Beijin

方法 :ge(columnName,value) 大于等于(>=)greater-than or equals-to 
使用示范:mDao.queryBuilder().where().ge(“id”, 2).query(); 
对应SQL:SELECT * FROM t_person WHERE id >= 2 
结果: 
2 Bush George Fifth Avenue New York 
3 Carter Thomas Changan Street Beijing

方法 :le(columnName,value) 小于等于(<=)less than or equals-to 
使用示范:mDao.queryBuilder().where().le(“id”, 2).query(); 
对应SQL:SELECT * FROM t_person WHERE id <= 2 
结果: 
1 Adams John Oxford Street London 
2 Bush George Fifth Avenue New York

方法 :ne(columnName,value) 不等于(<>)not-equal-to 
使用示范:mDao.queryBuilder().where().ne(“id”, 2).query(); 
对应SQL:SELECT * FROM t_person WHERE id <> 2 
结果: 
1 Adams John Oxford Street London 
3 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 ) 
结果: 
1 Adams John Oxford Street London 
2 Bush George Fifth Avenue New 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 ) 
结果: 
3 Carter Thomas Changan Street Beijin

方法 :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%’ 
结果: 
1 Adams John Oxford Street London

方法 :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 
结果: 
1 Adams John Oxford Street London 
2 Bush George Fifth Avenue New 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 ) 
结果: 
2 Bush George Fifth Avenue New 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 ) 
结果: 
1 Adams John Oxford Street London 
2 Bush George Fifth Avenue New York

ORDER BY 
根据指定列名排序,降序,升序 
使用示范:mDao.queryBuilder().orderBy(“id”, false).query(); //参数false表示降序,true表示升序。 
对应SQL:SELECT * FROM t_person ORDER BY id DESC(降序) 
结果: 
Id LastName FirstName Address City 
4 Gates John Oxford Street Beijing 
3 Carter Thomas Changan Street Beijing 
2 Bush George Fifth Avenue New York 
1 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 
3 Gates Thomas Changan Street Beijing 
2 Bush George Fifth Avenue New York 
1 Adams John Oxford Street London

offset Limit 
offset跳过指定的行数 
limit限制获取指定行数 
使用示范:mDao.queryBuilder().offset(2).limit(2).query(); 可以用来分页 
对应SQL:SELECT * FROM t_person LIMIT 2 OFFSET 2 
结果: 
3 Carter Thomas Changan Street Beijing 
4 Gates Bill Xuanwumen 10 Beijing

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 
结果 
4 Gates Bill Xuanwumen 10 Beijing

countOf 
返回查询结果的总数 
使用示范:mDao.queryBuilder().countOf() 
对应SQL:SELECT COUNT(*) FROM t_person 
结果 4

iterator 
返回一个结果集的迭代器。 
使用示范:Iterator iterator = mDao.queryBuilder().iterator(); 
queryForFirst 
返回所有行的第一行。 
使用示范:mDao.queryBuilder().queryForFirst();

posted @ 2017-10-16 20:14  Mr.zzz  阅读(37)  评论(0编辑  收藏  举报