GreenDao

来源:互联网 发布:淘宝网店产品摄影 编辑:程序博客网 时间:2024/04/28 12:21

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.多对多的写法

  1. Property studentId = stuAndteaBean.addLongProperty("studentId").getProperty();  
  2. Property teacherId = stuAndteaBean.addLongProperty("teacherId").getProperty();  
  3.   
  4. //这里其实很简单,就是建立两个1:n的关系  
  5. stuAndteaBean.addToOne(studentBean,studentId).setName("onestu");  
  6. stuAndteaBean.addToOne(teacherBean,teacherId).setName("onetea");  
  7. studentBean.addToMany(stuAndteaBean,studentId).setName("manystu");  
  8. 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


0 0
原创粉丝点击