Android Studio配置GreenDAO 3.2.0和使用方法

我相信,在平时的开发过程中,大家一定会或多或少地接触到SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写SQL语句与解析查询结果等。所以,适用于Android ORM框架也就孕育而生了,现在市面上主流的框架有OrmLite、SugarORM、Active Android、Realm与GreenDAO。今天主要来讲一下GreenDAO 3.0G后的版本是怎么在Android Studio上配置的。
简单的讲,GreenDAO是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。(greenDAO is a light & fast ORM solution that maps objects to SQLite databases.) 。

Android ORM 框架之 greenDAO 使用心得

一、配置方法

1.直接开始配置,首先找到这个Library,如下图:

2. 找到相应Module的build.gradle文件,添加的下面的内容:

说明:第三步配置的是生成的数据库操作模板代码的路径。

3.找到Project的build.gradle文件,添加下面的内容:

至此 配置就完成了,下来就开始生成数据库并使用。

GreenDAO 3.0之前的配置方式可以点这里查看。

二、生成数据库操作DAO代码

1.在项目中新建一个表字段的实体类,不需要自己写get和set方法,在生成表的时候会自动生成。不要忘了在类名上标记@Entity注解如图: 

2.选择build ——Make Project 一切顺利的话则会在包名下生成数据库的操作类,如下图:

三、使用方法

数据库的操作包括增删改改查,方法如下:

package com.jackie.greendao;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText mName, mAge;private Button mAdd;private ListView mListView;private DaoMaster.DevOpenHelper mDevOpenHelper;private DaoMaster mDaoMaster;private DaoSession mDaoSession;private PersonDao mPersonDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initEvent();openDb();}private void initView() {mName = (EditText) findViewById(R.id.name);mAge = (EditText) findViewById(R.id.age);mAdd = (Button) findViewById(R.id.add);mListView = (ListView) findViewById(R.id.list_view);}private void initEvent() {mAdd.setOnClickListener(this);}private void openDb() {mDevOpenHelper = new DaoMaster.DevOpenHelper(this, "person.db", null);mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDb());mDaoSession = mDaoMaster.newSession();mPersonDao = mDaoSession.getPersonDao();}//插入public void insert() {Person person = new Person(Long.valueOf(1), mName.getText().toString(), Integer.parseInt(mAge.getText().toString()));mPersonDao.insert(person);mName.setText("");mAge.setText("");}public void delete(Person person) {mPersonDao.delete(person);}//更新public void update(Person person) {mPersonDao.insertOrReplace(person);}//查询public void query() {List<Person> persons = mPersonDao.queryBuilder().list();}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.add:insert();break;}}
}

四、查询功能

GreeDAO提供了各种各种的查询API,参见http://greenrobot.org/greendao/documentation/queries/

如果需要在控制台查看GreenDao是怎么拼装SQL语句的,在OnCreate()方法中打开下面的开关:

五、条件查询

    //查询所有数据public void queryAll() {List<Person> persons = mPersonDao.queryBuilder().list();}//eq: equal 精确查询  名字等于jackiepublic void queryEq() {Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.eq("jackie")).unique();}//notEq: not equal 精确查询  名字不等于jackiepublic void queryNotEq() {Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.notEq("jackie")).unique();}//like  模糊查询  名字以jackie开头public void queryLike() {Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie")).unique();//通配符List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).list();}//between 区间查询 年龄在20到30之间public void queryBetween() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.between(20, 30)).list();}//gt: greater than 半开区间查询,年龄大于18public void queryGt() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.gt(18)).list();}//ge: greater equal 半封闭区间查询,年龄大于或者等于18public void queryGe() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.ge(18)).list();}//lt: less than 半开区间查询,年龄小于18public void queryLt() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.lt(18)).list();}//le: less equal 半封闭区间查询,年龄小于或者等于18public void queryLe() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.le(18)).list();}//名字以jackie开头,年龄升序排序public void queryLikeAsc() {//通配符List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderAsc(PersonDao.Properties.Age).list();}//名字以jackie开头,年龄降序排序public void queryLikeDesc() {List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderDesc(PersonDao.Properties.Age).list();}

当上述查询满足不了业务逻辑时,可以自定义查询语句:

六、多线程查询

首先来看错误的方法:

错误截图:

从上面可以看出,只能在创建Query对象的线程中调用查询方法!

解决方法:

七、1对1查询


 

转载于:https://www.cnblogs.com/zhujiabin/p/7490040.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收件服务器主机名未响应,邮箱收件服务器主机名是什么

邮箱收件服务器主机名是什么 内容精选换一换FTP/SFTP连接适用于从线下文件服务器或ECS服务器上迁移文件到OBS或数据库。当前仅支持Linux操作系统的FTP 服务器。连接FTP或SFTP服务器时&#xff0c;他们的连接参数相同&#xff0c;如表1所示。FTP/SFTP连接参数参数名说明取值样例…

数字孪生技术,让酷炫的智慧城市不再遥不可及

物联网智库 整理发布智慧城市对于不同的人&#xff0c;不同的角色所处不同立场都会有不同的定义。在普通人眼中“上班不拥堵&#xff0c;下班走近路”是智慧城市......在老年人眼中“独自在家遭遇危险&#xff0c;能有人及时提供帮助”是智慧城市......在消防员眼中“火情在苗头…

python中read和readline的区别_Python中read()、readline()和readlines()三者间的区别和用法...

前言众所周知在python中读取文件常用的三种方法&#xff1a;read(),readline(),readlines()&#xff0c;今天看项目是又忘记他们的区别了。以前看书的时候觉得这东西很简单&#xff0c;一眼扫过&#xff0c;待到用时却也只知道有这么几个方法&#xff0c;不懂得它的原理与用法。…

CentOS赋予一个普通用户root权限

http://www.linuxidc.com/Linux/2012-07/64530.htm转载于:https://www.cnblogs.com/Baronboy/p/7491592.html

腾讯文档网页版登录提示服务器,腾讯文档官网地址,腾讯文档电脑版pc端登录入口...

腾讯文档是腾讯近期推出的一款多人协作在线文档产品&#xff0c;不但打通QQ、微信和PC等多个平台&#xff0c;哪么腾讯文档官网地址是什么&#xff1f;有没有电脑版&#xff0c;想在pc端编辑文档怎么办呢&#xff1f;腾讯文档没有电脑版软件&#xff0c;但腾讯文档网页版可以替…

向深度学习三剑客学习四种科研精神(上)

来源&#xff1a;陈德旺科学网博客深度学习&#xff0c;尤其是深度神经网络学习算法的兴起和大数据的加持&#xff0c;结合GPU的算力&#xff0c;如同 “三英战吕布”&#xff0c;终于搞定了人工智能这一反复无常的“吕布”&#xff0c; 使得人工智能得以第三次复兴。如今&…

val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...

在上一篇原创文章MySQL一个表的自增id用完了&#xff0c;背井大佬让我用这些姿势再往里插数据&#xff0c;最后留下了一个问题&#xff0c;大家知不知道int(1)和int(11)有什么区别&#xff0c;没有小伙伴互动回答&#xff0c;只有一位老哥让我说一下什么区别&#xff0c;我说上…

【重点】【堆】347.前K个高频元素

题目 最大的K个元素 > 小根堆&#xff08;类似上窄下宽的梯形&#xff09; 最小的K个元素 > 大根堆&#xff08;类似倒三角形&#xff09; 法1&#xff1a;小根堆 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> valToC…

Nginx 反向代理+高可用

反向代理主机IP&#xff1a;10.0.0.20 WEB01主机IP : 10.0.0.22 WEB02主机IP : 10.0.0.23 反向代理主机配置&#xff1a;10.0.0.20 [rootnode1 html]# vim /etc/nginx/conf.d/web.conf server {listen 80;server_name www.wanglan.com;location / {proxy_pass http://1…

DNS系统服务器端口是,dns端口号是多少默认

●在Windows 95&#xff0f;98、Windows NT、UNIX及Linux环境下&#xff0c;均可使用TCP/P联网&#xff0c;请回答下列问题。在Windows 95&#xff0f;98平台下安装与配置TCP&#xff0f;IP的顺序应该是&#xff1a;安装网络适配器 (40) &#xff0c;安装TCP/IP协议&#xff0c…

c#switch语句判断成绩_C#程序流程控制 知多少?

最近发现读书是个慢过程&#xff0c;很难一口吃个胖子&#xff0c;尤其读这种技术类的书&#xff0c;需要细嚼慢咽的精读&#xff0c;很耐心的读。迄今为止我一个像样的C#程序都没有做过&#xff0c;是小白中的小白&#xff0c;这倒不影响什么&#xff0c;毕竟在曾经学过C语言的…

无穷存在吗?

来源&#xff1a;数学职业家无穷大的存在问题是一个令人惊讶的古老问题。亚里士多德首先引入了一个明确的区分&#xff0c;以帮助理解它的意义。他区别两种不同的无穷大。其中之一&#xff0c;他称之为潜在无穷大&#xff1a;这种无限大刻画了无止境的宇宙或一个永无休止的名单…

jquery.tmplate使用心得

jquery.tmplate使用心得 jquery.tmplate使用心得 jquery.tmpl.js&#xff0c;是与jquey共同使用的html模板插件。该插件可通过简单的语法将数据放入到html模板中&#xff0c;可以很好的将数据渲染到页面上。该插件在本项目中使用较多且网上的讲解比较分散&#xff0c;无系统的a…

机器学习虽好,也要看什么场合!

来源&#xff1a;AI科技评论编译 | 王念编辑 | 丛末身为AI时代的程序猿&#xff0c;我们天生就对数据集敏感。因此&#xff0c;当我们拿到一批真实数据时&#xff0c;激动之情肯定溢于言表&#xff01;举例来说&#xff0c;我们可能拿到了一组患者正确药量的数据集&#xff0c;…

CVTE前端笔试编程题

这些题目是做完笔试之后&#xff0c;在别的地方找到的&#xff0c;现在附上。 1.(1)这题考察的怎么把参数转换为数组&#xff0c;然后再截取你想要的位数。 function C(){var a_argsArray.prototype.slice.call(argumens,0,2);var b_argsArray.prototype.slice.call(arguments,…

springboot 引入jdbc驱动_SpringBoot+MyBatis+Druid整合demo

最近自己写了一个SpringBootMybatis&#xff08;generator&#xff09;druid的demo1. mybatisgenerator逆向工程生成代码1. pom文件pom文件添加如下内容&#xff0c;引入generator插件<!-- mybatis代码生成插件 --><!--如果使用的mysql驱动是6.x的&#xff0c;那就无法…

盘点|世界流行的十大机械工程设计软件,你会用几种?

来源&#xff1a;自机械前线机械设计是机械生产的第一步&#xff0c;是决定机械性能的最主要的因素。为了满足机械产品性能的高要求&#xff0c;在机械设计中大量采用计算机技术进行辅助设计和系统分析&#xff0c;以下是目前世界上流行的十款式机械工程设计软件。1、Autodesk …

【Java】JavaIO(一)、基础知识

一、常用概念介绍 Java的IO&#xff0c;实现输入输出的基础&#xff0c;可以方便的实现数据的输入输出 二、流的分类 1. 按照流向来分&#xff1a; a). 输入流&#xff1a;向应用程序输 b). 输出流&#xff1a;从应用程序中输出 输入输出流是站在程序的角度来说的&#xff0c;只…

SpaceX再发射58颗星链卫星 总数达到538颗

来源&#xff1a;网易智能据外媒报道&#xff0c;在距离上次星链&#xff08;Starlink&#xff09;卫星发射仅仅10天后&#xff0c;美国太空探索技术公司SpaceX于当地时间周六再次发射了最新一批星链卫星。与以往每批发射60颗星链卫星不同的是&#xff0c;SpaceX此次只发射了58…

MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)(转)

阅读目录 一、MVC原理解析 1、MVC原理二、HttpHandler 1、HttpHandler、IHttpHandler、MvcHandler的说明2、IHttpHandler解析3、MvcHandler解析三、HttpModule 1、HttpModule能干什么2、HttpModule的使用3、HttpModule和HttpHandler如何区分4、UrlRoutingModule解析 四、总结正…