代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你(来自csdn首页)
我们的代码仍然使用前面的文章用到的GreendaoDemo项目
利用我们前面学到的知识,我们为数据库添加一下三条数据:
Father表:
姓名 | 年龄 |
---|---|
James | 45 |
Tom | 60 |
Jet | 40 |
Son表:
姓名 | 年龄 | fatherId |
---|---|---|
小猿 | 20 | fatherDao.insert(father0) |
小明 | 28 | fatherDao.insert(father1) |
小明子 | 15 | fatherDao.insert(father2) |
到此,准备工作完成!
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方法就是搜索一个通配符
所以只要含有小明的数据,都会搜索出来了
我们知道这是相当于一个模糊搜索,并不是返回一条数据,而是一个列表了
我们看一下使用“>”查找的代码:
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
这里我们不一一演示了,可以自己敲代码感受一下!
这两个查询就是查询数据库中有无数据的
使用方法与上文的查询方法类似,大家可以自己体验一下!
这里不再演示
我们重点来学习一下对数据中的数据升序或降序排列并打印出来
首先我们实现数据的升序排列,我们封装了一个queryAsc的方法:
private void queryAsc() {
List data0 = sonDao.queryBuilder().orderAsc(SonDao.Properties.Age).list();
Log.d(“data0”,”queryAsc() called”+data0);
我们运行,搜索data0标签,可以看到数据的打印顺序是小明子、小猿、小明
我们通过orderAsc方法就轻松实现了数据的升序排列!
降序排列呢,我们可以将orderAsc方法替换为orderDesc就可以实现了!
当我们的数据库非常庞大的时候
我们知道在主线程中查询数据时非常耗时的
所以我们这需要把查询放到子线程中
下面我们封装一个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之「01.初始GreenDAO」
GreenDAO之「02.Eclipse环境下的基本操作」
GreenDAO之「03.AS环境下的基本操作」
GreenDAO之「04.greendao的各种查询方法」
程序猿干货分享,欢迎您的到来!