程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂(来自csdn首页)
其实,我们的list()方法在前两篇文章中我们已经使用了它查询我们添加到数据库中的方法,这里就不贴代码了
它是将所有实体载入内存,以ArrayList形式返回,使用起来也是最简单的
下面我们还是使用前两篇文章所写的代码来演示一下listLazy()方法是如何使用的
首先我们将addPerson()方法先注释掉,因为我们的代码已经运行过一次,数据也都插入到数据库当中了
然后我们再新建一个querData()方法
在queryData()方法内部加入以下代码:
LazyList sonList = sonDao.queryBuilder().listLazy();
for (Son son : sonList) {
Log.d("MAIN_TAG", "queryAll() called" + son);
}
sonList.close();
我们可以看到我们调用listLazy()方法返回了一个LazyList类型的对象
然后打印查询结果的方法是与list()方法相同的
其实listLazy()要求实体按需加载到内存。当列表中的其中一个元素第一次被访问,他会被加载并缓存备用,这里我们并没有体会到,这里我们先学习一下他是如何使用的
然后我们应该注意到listLazy()方法使用完之后是必须需要使用close()方法关闭的
这个方法使用起来是与listLazy()方法无异的,我们只需要将调用的listLazy()方法修改为listLazyUncached()方法:
LazyList sonList = sonDao.queryBuilder().listLazyUncached();
for (Son son : sonList) {
Log.d("MAIN_TAG", "queryAll() called" + son);
}
sonList.close();
其实,listLazyUncached()方法是创建一个虚拟的实体列表,任何访问列表中的元素都会从数据库中读取
当然,它使用完也是需要关闭的
listIterator()方法使用起来就与前面介绍的方法不同了:
Iterator sonList = sonDao.queryBuilder().listIterator();
while (sonList.hasNext()) {
Son son = sonList.next();
Log.d("MAIN_TAG", "queryAll() called" + son);
}
首先,它返回的是一个Iterator对象,所以我们需要使用一个Iterator对象去接收
然后它在输出数据的时候需要调用一个类似游标的方法
我们使用while循环来遍历sonList中的所有数据,然后打印每一个数据
其实,它是可迭代访问结果集,按需加载数据,数据不缓存
当我们想看一下greendao到底是如何拼装sql数据的时候
greendao也为我们提供了一种方式
首先,我们在onCreate方法的内部添加两个常量:
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
然后我们直接运行程序,我们在控制台搜索greenDAO标签下的打印数据,我们就可以看到:
我们可以看到SELECT T.”NAME”,T.”AGE”,T.”_id”,T.”FATHER_ID” FROM “SON” T 这样一条sql语句
往期回顾:
GreenDAO之「01.初始GreenDAO」
GreenDAO之「02.Eclipse环境下的基本操作」
GreenDAO之「03.AS环境下的基本操作」
程序猿干货分享,欢迎您的到来!