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