1.insertOrReplace 如果参数 的唯一字段的值与数据库中某条数据一样,那么执行的是插入一条数据,并将原数据删除,也就是类似于更新,但是主键ID变化了,并且更新没有插入的字段都是null。
2. update(实体) ,实体必须包含主键,否则报错,实体中没有赋值的也会被更新的成了空值。
3. 这里有时候,我们在运行MyDaoGenerator.java代码,生成类的时候,会提示GKB代码无法运行,这是因为你在这个文件里写了中文,它不认,就算是你把这个文件转成了utf-8,也会报这个错,这时候,我们只能用记事本打开这个文件,然后覆盖保存,在保存时,编码选择 ANSI。
4. query 的查询 ,分页
noteDao.queryBuilder().where(NoteDao.Properties.NoteID.eq("hlx"), NoteDao.Properties.Comment.eq("")) .limit(20).offset(2);
5. 一对多的写法
Property customerId = order.addLongProperty("customerId").notNull().getProperty(); order.addToOne(customer, customerId); ToMany customerToOrders = customer.addToMany(order, customerId); customerToOrders.setName("orders");
6.一对多中deleteAll ,update 不会产生联动效果,在插入n 端的时候设置setCustomer,即设置一端的值,那么查询的时候就可以返回一段的值
7.多对多的写法
- Property studentId = stuAndteaBean.addLongProperty("studentId").getProperty();
- Property teacherId = stuAndteaBean.addLongProperty("teacherId").getProperty();
- //这里其实很简单,就是建立两个1:n的关系
- stuAndteaBean.addToOne(studentBean,studentId).setName("onestu");
- stuAndteaBean.addToOne(teacherBean,teacherId).setName("onetea");
- studentBean.addToMany(stuAndteaBean,studentId).setName("manystu");
- teacherBean.addToMany(stuAndteaBean,teacherId).setName("manytea");
-
8. queryBuilder 多线程时使用forCurrentThread() 来避免死锁
9.greenDao支持唯一结果和结果链表。如果你只想获取唯一的结果,那么可以使用unique(),它要么给你唯一一个结果,要么null,如果你不想获得null,那么你可以使用uniqueOrThrow(),它会在匹配结果为空时抛出DaoException的异常。
如果你想获取多个结果,以下有几个方案:
list():所有结果都会载入内存,结果会死一个ArrayList。
listLazy():结果会按需载入内存,一旦其中一个元素被要求了,那么就会载入内存并且进行chache,必须手动关闭。
还有listLazyUncached()和listIterator(),也需要手动通过调用close()来关闭。
参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1127/2069.html
http://blog.csdn.net/chenguang79/article/details/50469138