GreenDAO之「05.条件查询」

代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你(来自csdn首页)

这篇博文我们一起学习一下使用greendao如何进行条件查询,同样我们这里使用实例来演示一下

1.准备工作

我们的代码仍然使用前面的文章用到的GreendaoDemo项目
利用我们前面学到的知识,我们为数据库添加一下三条数据:
Father表:

姓名 年龄
James 45
Tom 60
Jet 40

Son表:

姓名 年龄 fatherId
小猿 20 fatherDao.insert(father0)
小明 28 fatherDao.insert(father1)
小明子 15 fatherDao.insert(father2)

到此,准备工作完成!

2.eq 和 noteq 和 like 查询

1.首先,第一种条件查询我们使用到的是一个eq方法,我们封装了一个queryEq方法,先看代码:

private void queryEq() {
    Son mingEq = sonDao.queryBuilder().where(SonDao.Properties.Name.eq("小明")).unique();
    Log.d("mingEq", "queryEq() called" + mingEq);
}

然后我们运行,通过在logcat中搜索mingEq标签,我们就可以看到,控制台只打印了小明的数据
其实这个参数就是指定某一数据进行查找
它返回的是一个Son型的数据
通过where关键字判断Name为小明来查找到小明的信息
eq方法为具体查找

2.我们再来看一下noteq方法,我们封装了一个querynoteq方法,代码如下:

private void queryNotEq() {
    List mingNotEq = sonDao.queryBuilder().where(SonDao.Properties.Age.notEq(15)).list();
    Log.d("mingNotEq", "queryNotEq() called" + mingNotEq);
}

我们运行代码,通过搜索mingNotEq标签,我们可以看到小猿和小明的数据
我们可以看到与eq不同,notEq方法返回的数据时一个list

3.我们再来看一下like方法,我们封装了一个queryLike方法,看一下代码:

private void queryLike() {
    List mingLike = sonDao.queryBuilder().where(SonDao.Properties.Name.like("小明%")).list();
    Log.d("mingLike", "queryLike() called" + mingLike);
}

好,我们运行代码,通过搜索mingLike标签,我们就可以看到小明和小明子的数据
为什么呢,其实,like方法就是搜索一个通配符
所以只要含有小明的数据,都会搜索出来了
我们知道这是相当于一个模糊搜索,并不是返回一条数据,而是一个列表了

3. >、<、>=、<= 查询

我们看一下使用“>”查找的代码:
private void queryGt() {
List mingGt = sonDao.queryBuilder().where(SonDao.Properties.Age.gt(18)).list();
Log.d(“mingGt”, “queryGt() called” + mingGt);
}
通过logcat我们可以看到我们搜索的是年龄大于18的数据
这是因为我们调用了gt方法,gt方法就是实现的“>”的条件查询

其实标题中的四种条件对应的就是四个方法
1. > : gt
2. < : lt
3. >= : ge
4. <= : le

这里我们不一一演示了,可以自己敲代码感受一下!

4. isNull 和 isNotNull 查询

这两个查询就是查询数据库中有无数据的
使用方法与上文的查询方法类似,大家可以自己体验一下!
这里不再演示

5. 排序

我们重点来学习一下对数据中的数据升序或降序排列并打印出来

首先我们实现数据的升序排列,我们封装了一个queryAsc的方法:
private void queryAsc() {
List data0 = sonDao.queryBuilder().orderAsc(SonDao.Properties.Age).list();
Log.d(“data0”,”queryAsc() called”+data0);
我们运行,搜索data0标签,可以看到数据的打印顺序是小明子、小猿、小明
我们通过orderAsc方法就轻松实现了数据的升序排列!

降序排列呢,我们可以将orderAsc方法替换为orderDesc就可以实现了!

6. 多线程查询

当我们的数据库非常庞大的时候
我们知道在主线程中查询数据时非常耗时的
所以我们这需要把查询放到子线程中
下面我们封装一个queryThread方法:

private void queryThread() {

    final Query query = sonDao.queryBuilder().build();
    new Thread(){
        @Override
        public void run() {
            List list = query.list();
            Log.d("queryThread", "run() called" + list);
        }
    }.start();
}

我们运行程序,发现程序崩溃了
其实,greendao框架呢是不允许多线程查询操作这样使用的
他为我们提供了forCurrentThread方法
我们可以这样:
private void queryThread() {

    final Query query = sonDao.queryBuilder().build();
    new Thread(){
        @Override
        public void run() {
            List list = query.forCurrentThread().list();
            Log.d("queryThread", "run() called" + list);
        }
    }.start();
}

其实,这是greendao为提升效率,为我们提供的一种优化方法
当我们使用子线程查询操作时,这样的方法是更好的
具体原因可以看一下greendao的源代码,仔细研究一下!

到此,我们greendao条件查询的学习就完成了!

好,关于GreenDAO的学习就基本结束了


往期回顾:
GreenDAO之「01.初始GreenDAO」
GreenDAO之「02.Eclipse环境下的基本操作」
GreenDAO之「03.AS环境下的基本操作」
GreenDAO之「04.greendao的各种查询方法」

彩蛋!!

看到这里的朋友你有福利了!我的个人微信公众号上线了!众多热门技术文章,众多有趣好玩的脑洞,请扫描下方二维码关注!

二维码
程序猿干货分享,欢迎您的到来!

你可能感兴趣的:(安卓学习-框架)