一.GreenDao增删改查:

接着上一篇的文章继续学习:

插入数据:

<span style="font-size:18px;">Note note = new Note(1L, "1", "1", new Date());noteDao.insert(note);</span>
插入批量数据:

<span style="font-size:18px;">                Note note = new Note(1L, "1", "1", new Date());Note note1 = new Note(2L, "1", "1", new Date());Note note2 = new Note(3L, "1", "1", new Date());Note note3 = new Note(4L, "1", "1", new Date());final List<Note> list = new ArrayList<Note>();list.add(note);list.add(note1);list.add(note2);list.add(note3);noteDao.insertInTx(new Iterable<Note>(){@Overridepublic Iterator<Note> iterator() {// TODO Auto-generated method stubreturn list.iterator();}});</span>


删除数据:

<span style="font-size:18px;">        Note note = new Note(1L, "1", "1", new Date());noteDao.delete(note);//传入Note来删除数据noteDao.deleteByKey(1L);//传入删除数据的id值</span>
删除所有数据:

<span style="font-size:18px;">noteDao.deleteAll();</span>

修改数据:

<span style="font-size:18px;">        Note note = new Note(1L, "123", "1", new Date());noteDao.update(note1);</span>


查询数据:

<span style="font-size:18px;">List<Note> list = noteDao.loadAll();Iterator<Note> it = list.iterator();while(it.hasNext()){Note note = it.next();System.out.println(note.getId());}</span>

二.自定义查询:

自定义查询就要用到QueryBuilder类,这个类大量节省了你写sql的时间,但是发现语句中的bug还是不容易的,因为要在编译时才执行,所以不容发现错误。

根据条件查询:

<span style="font-size:18px;">QueryBuilder<Note> bi = noteDao.queryBuilder();//查询id为1的数据List<Note> list = bi.where(Properties.Id.eq("1")).list();</span>

where中可以传入多个条件。

查询排序:

<span style="font-size:18px;">QueryBuilder<Note> bi = noteDao.queryBuilder();//查询id为1的数据,以Id排序返回List<Note> list = bi.where(Properties.Id.eq("1")).orderAsc(Properties.Id).list();</span>

嵌套查询:

QueryBuilder<Note> bi = noteDao.queryBuilder();        // eq相等   notEq 不相等,   gt大于   lt小于   ge大于等于   le 小于等于//这条sql语句就是Text为1,且id大于1,且Comment为1的数据List<Note> list = bi.where(bi.and(Properties.Text.eq("1"),bi.and(Properties.Id.gt(1),Properties.Comment.eq("1")))).list();

而且QueryBuilder是支持唯一结果和列表结果的。如果想得到一个唯一结果调用QueryBuilder的unique()方法,这样在有匹配条件的时候会返回一个唯一结果,而不是返回null,否则怎会返回null,如果你不想返回null,就用uniqueOrThrow()方法如果没有匹配条件的时候会抛出一个 DaoException异常。

想返回多个实体就用:

list():所有的实体被加载到内存中。该结果通常是一个没有magic involved的ArrayList。使用起来最简单。
listLazy():实体按照需求加载进入内存。一旦列表中的一个元素被第一次访问,它将被加载同时缓存以便以后使用。必须close。

LazyList<Note> list = bi.where(Properties.Text.eq("1")).listLazy();System.out.println(list.size());list.close();
ListLasyUncached(): 一个“虚拟”的实体列表:任何对列表元素的访问都会导致从数据库中加载,必须close。listIterator(): 遍历通过需要的时候加载(lazily)获得的结果,数据没有缓存,必须close。

如果你使用QueryBuilder构建了一个Query对象,设置好参数,如果以后不变更参数内容,则这个query可以多次重复使用,比重新构建提高了效率。如果要重新设置参数内容则需要使用setParameter()。

Query<Note> bi = noteDao.queryBuilder().where(Properties.Id.gt("1")).build();bi.setParameter(0,"2");LazyList<Note> list = bi.listLazy();System.out.println(list.size());list.close();
如果使用上边的sql查询不爽的话可以使用原始的sql语句查询。

Query<Note> bi = noteDao.queryBuilder().where(new StringCondition("_id in (select _id from NOTE where text=1)")).build();LazyList<Note> list = bi.listLazy();System.out.println(list.size());list.close();








更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)Market 分析【安智市场】
  5. android传递数据bundle封装传递map对象
  6. Android程序运行中动态加载Lib的方法(一)
  7. Android与JS互相调用以及注意
  8. Android开发学习笔记——四大组件之ContentProvider
  9. Android(安卓)关于获取摄像头帧数据

随机推荐

  1. Android - 设置adb的usb连接配置
  2. Android 多媒体应用——SoundPool音频播
  3. Android ImageView设置长度高度为wrap_co
  4. Fragment生命周期
  5. Android 圆形头像显示
  6. android studio运行Kotilin程序出现Error
  7. Android viewpage滑动选项卡
  8. Android实现圆角ImageView
  9. Android Developers:在SQL数据库中保存数
  10. Android创建并更新通知栏通知