1.GreenDao数据库简介

 

greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。如下图所示:

 

 

官网地址:http://greenrobot.org/greendao

 

github:https://github.com/greenrobot/greenDAO

 

 

 

 

2.GreenDao 优点


2.1.性能高,号称Android最快的关系型数据库。

 

2.2.内存占用小 库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制。

 

2.3.支持数据库加密  greendao支持SQLCipher进行数据库加密 。

 

2.4.简洁易用的API。

 

 

 

 

3.代码讲解

 

3.1.配置Gradle

 

根目录gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {    repositories {        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.3.2'        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        google()        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

 

 

 

app gradle

apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' // apply pluginandroid {    compileSdkVersion 28    defaultConfig {        applicationId "com.wjn.androiddbdemo"        minSdkVersion 15        targetSdkVersion 26        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    greendao {        // 版本号        schemaVersion 1        //greendao输出dao的数据库操作实体类文件夹        daoPackage 'com.wjn.androiddbdemo.greendao'        //greenDao实体类包文件夹        targetGenDir 'src/main/java'    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support:appcompat-v7:28.0.0'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:1.0.2'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'    implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'    implementation 'org.greenrobot:greendao:3.2.2' // add library}

 

 

 

 

 

3.2.创建实体类

 

步骤

 

3.2.1.创建类名为People的普通类并创建所需要的属性 

public class People {    private Long id;    private String name;    private String height;    private String weight;}

id 必须为Long

 

 

3.2.2.类名上@Entity

 

 

3.2.3.Make Project

稍等片刻 后实体类 变成如下

@Entitypublic class People {    @Id(autoincrement = true)    private Long id;    private String name;    private String height;    private String weight;    @Generated(hash = 516943684)    public People(Long id, String name, String height, String weight) {        this.id = id;        this.name = name;        this.height = height;        this.weight = weight;    }    @Generated(hash = 1406030881)    public People() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return this.name;    }    public void setName(String name) {        this.name = name;    }    public String getHeight() {        return this.height;    }    public void setHeight(String height) {        this.height = height;    }    public String getWeight() {        return this.weight;    }    public void setWeight(String weight) {        this.weight = weight;    }}

 

注意:主键要添加autoincrement  自增

 

否则会报 does not have a single-column primary key 错误

 

 

 

设置的文件夹中会生成以下类

 

 

 

 

 

3.3.在Application中获取 DaoSession

public class MyApplication extends Application {    private static DaoSession daoSession;    @Override    public void onCreate() {        super.onCreate();        setupDatabase();    }    /**     * 配置数据库     */    private void setupDatabase() {        //创建数据库shop.db 创建SQLite数据库的SQLiteOpenHelper的具体实现        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendaodemo.db", null);        //获取SQLiteDatabase对象        SQLiteDatabase db = helper.getReadableDatabase();        //获取数据库对象        DaoMaster daoMaster = new DaoMaster(db);        //获取dao对象管理者        daoSession = daoMaster.newSession();    }    /**     * 获取 DaoSession 外部调用     * */    public static DaoSession getDaoInstant() {        return daoSession;    }}

 

 

 

3.4.Activity代码

public class GreenDaoActivity extends AppCompatActivity implements View.OnClickListener {    private TextView textView1;    private TextView textView2;    private TextView textView3;    private TextView textView4;    private TextView textView;    private String string="123456";    private Long id;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_greendao);        initView();    }    /**     * 初始化各种View     */    private void initView() {        //根据状态栏颜色来决定 状态栏背景 用黑色还是白色 true:是否修改状态栏字体颜色        StatusBarUtil.setStatusBarMode(this, false, false, R.color.colorPrimary);        textView1 = findViewById(R.id.activity_greendao_textview1);        textView2 = findViewById(R.id.activity_greendao_textview2);        textView3 = findViewById(R.id.activity_greendao_textview3);        textView4 = findViewById(R.id.activity_greendao_textview4);        textView = findViewById(R.id.activity_greendao_textview);        textView1.setOnClickListener(this);        textView2.setOnClickListener(this);        textView3.setOnClickListener(this);        textView4.setOnClickListener(this);        id=Long.parseLong(string);    }    /**     * 各种点击事件的方法     */    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.activity_greendao_textview1://增                insertUser();                break;            case R.id.activity_greendao_textview2://删                deleteUser();                break;            case R.id.activity_greendao_textview3://改                updateUser();                break;            case R.id.activity_greendao_textview4://查                List list=queryUserList();                StringBuilder sbBuilder = new StringBuilder();                for(int i=0;i queryUserList() {        UserInfoDao userInfoDao= MyApplication.getDaoInstant().getUserInfoDao();        QueryBuilder qb = userInfoDao.queryBuilder();        List list = qb.list();        return list;    }}

 

 

 

3.5.结果

 

3.5.1.增——>查

 

 

3.5.2.删——>查

 

 

3.5.3.改——>查

 

 

 

 

3.6.注意

主键设置了自增后 插入是就可以不用设置id

 

3.6.1.插入数据

/**     * 插入一条记录     */    public void insertUser() {        UserInfo userInfo=new UserInfo();        userInfo.setName("张三");        userInfo.setAge("29");        UserInfo userInfo1=new UserInfo();        userInfo1.setName("李四");        userInfo1.setAge("39");        UserInfo userInfo2=new UserInfo();        userInfo2.setName("旺旺");        userInfo2.setAge("19");        UserInfo userInfo3=new UserInfo();        userInfo3.setName("王伟");        userInfo3.setAge("59");        List list=new ArrayList<>();        list.add(userInfo);        list.add(userInfo1);        list.add(userInfo2);        list.add(userInfo3);        UserInfoDao userInfoDao= MyApplication.getDaoInstant().getUserInfoDao();        userInfoDao.insertInTx(list);    }

 

 

3.6.2.结果

 

 

 

 

 

 

代码链接:https://github.com/wujianning/AndroidDBDemo

更多相关文章

  1. TrafficStats ------- Android流量统计类的使用
  2. [Android]Service和Activity双向通信的两种方式
  3. 模拟获取android root权限
  4. Android(安卓)Content Provider Guides
  5. Android(安卓)NDK c创建java对象
  6. Android(安卓)9.0 SIM卡初始化流程
  7. 不同Activity之间传递数据--Bundle对象和startActivityForResult
  8. Android(安卓)数据库事务处理
  9. Android(安卓)O 绑定SurfaceFlinger到大核

随机推荐

  1. 忽略交互效应后果很严重,审稿人很生气!
  2. 妇女能顶半边天, 关于“中国女性”最新研
  3. grid实现12列栅格布局的组件并且实例圣杯
  4. unity常用方法库 持续跟新
  5. 【无偿分享】史上最全Python学习大礼包
  6. 适合财务人员的财务报表分析软件有哪些?
  7. Gateway网关过滤之后获取不到 HttpServle
  8. 干货丨DolphinDB通用计算教程
  9. JavaScript面向对象编程理解
  10. 20201203 高阶函数