GreeoDao的学习使用

非常好用的数据库框架-LitePal 前言: 在使用SQLite的时候,发现修改数据库表很麻烦,需要更改版本号,最重要的是,更新后以前保存的数据就没了!!!这多恐怖啊,其升级具体操作就是先删除原来的表,再新建同名表,也可以使用一些方法将数据不进行保留,但是很麻烦,对于小白来说,很痛苦。那么,万能的开源库就来拯救我们了,别说了,你一定会喜欢上它。LitePal是一款开源的数据库框架,使用对象关系映射模式,(大家在使用Hibernate、... 阅读详情

GreenDao:

greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。

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

greenDAO 优势

1、一个精简的库

2、性能最大化

3、内存开销最小化

4、易于使用的 APIs

5、对 Android 进行高度优化

GreenDao 使用

1 配置gradle相关:

compile 'org.greenrobot:greendao:3.2.0'

2在build.gradle中进行配置:

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

 

3,自定义路径

greendao{
    schemaVersion 1
    daoPackage 'com.greendao.song.greendao'
    targetGenDir 'src/main/java'
}

 

schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;

 

主要代码

创建一个Bean文件

实体注解:

 

@Entity(
        // 如果你有超过一个的数据库结构,可以通过这个字段来区分
        // 该实体属于哪个结构
        schema = "myschema",

        //  实体是否激活的标志,激活的实体有更新,删除和刷新的方法
        active = true,

        // 确定数据库中表的名称
        // 表名称默认是实体类的名称
        nameInDb = "AWESOME_USERS",

        // Define indexes spanning multiple columns here.
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // DAO是否应该创建数据库表的标志(默认为true)
        // 如果你有多对一的表,将这个字段设置为false
        // 或者你已经在GreenDAO之外创建了表,也将其置为false
        createInDb = false
)
public class User {
    ...
}

基础注解:

@Entity
public classUser {
    @Id(autoincrement = true)
    private Long id;

    @Property(nameInDb = "USERNAME")
    private String name;

    @NotNull
    private int repos;

    @Transient
    private int tempUsageCount;

    ...
}

 

1.实体@Entity注解

schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法
nameInDb:在数据中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表

2.基础属性注解

@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
@NotNul:设置数据库表当前列不能为空
@Transient :添加次标记之后不会生成数据库表的列

3.索引注解

@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库列添加了一个唯一的约束

4.关系注解

@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系

编译项目,User实体类会自动编译,生成get、set方法并且会在com.greendao.gen目录下生成三个文件,DaoMaster 、DaoSession、Dao类;

 

编写帮助类

public class GreenDaoHelper {
    private static DaoMaster.DevOpenHelper mHelper;
    private static SQLiteDatabase db;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    /**
     * 初始化greenDao,这个操作建议在Application初始化的时候添加;
     */
    public static void initDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
        mHelper = new DaoMaster.DevOpenHelper(MyApplication.context, "cache-db", null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }
    public static DaoSession getDaoSession() {
        return mDaoSession;
    }
    public static SQLiteDatabase getDb() {
        return db;
    }

}

 

增删改查

首先获取UserDao对象:

mUserDao = GreenDaoHelper.getDaoSession().getUserDao();

增

数据库的增删改查我们都将通过UserDao来进行,插入操作如下:

mUser = new User((long)1,"张三");
mUserDao.insert(mUser);//添加一个

User的第一个参数为id,如果这里传null的话在插入的过程中id字段会自动增长(现在知道为什么id要为Long类型了吧!)

删

删除数据和修改数据的思路一样,都是要先查找到数据:

List<User> userList = (List<User>) mUserDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();  
        for (User user : userList) {  
            mUserDao.delete(user);  
        }  

where表示查询条件,这里我是查询id小于等于10的数据,where中的参数可以有多个,就是说可以添加多个查询条件。最后的list表示查询结果是一个List集合,如果你只想查询一条数据,最后unique即可。当然,我们也可以根据id来删除数据:

User user = mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();  
        if (user == null) {  
            Toast.makeText(MainActivity.this, "用户不存在", Toast.LENGTH_SHORT).show();  
        }else{  
            mUserDao.deleteByKey(user.getId());  
        }  

根据主键删除

mUserDao.deleteByKey(id);

删除所有数据

mUserDao.deleteAll();

改

根据ID修改数据

mUser = new User((long)2,"anye0803");
mUserDao.update(mUser);

查

查询全部数据

List<User> users = mUserDao.loadAll();    

查询一条数据

User user = mUserDao.queryBuilder().where(UserDao.Properties.name.eq("张三")).unique();

 

 

数据库升级

1.修改gradle文件

首先在module的gradle文件中修改版本号:

//这里改为最新的版本号  
schemaVersion 2  

2.修改实体类

@Entity  
public class User {  
    @Property
    private int age;  
    @Property  
    private String password;  
    @Id  
    private Long id;  
    @Property(nameInDb = "USERNAME")  
    private String username;  
    @Property(nameInDb = "NICKNAME")  
    private String nickname;  
}

 

 

重现编译项目运行即可。

一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本,这种时候可以自定义UpgradeHelper

public class UpgradeHelper extends DaoMaster.DevOpenHelper {

    public static String TAG = UpgradeHelper.class.getSimpleName();

    public UpgradeHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    /**
     * Here is where the calls to upgrade are executed
     * onUpgrade方法中进行数据库的迁移
     */
    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {

        /* i represent the version where the user is now and the class named with this number implies that is upgrading from i to
        i++ schema */
        for (int i = oldVersion; i < newVersion; i++) {
            Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by migrating all tables data");
            // TODO: 注意把所新版本的表的xxDao都添加到这里
            MigrationHelper.getInstance().migrate(db, UserDao.class);
        }
    }
}
Android SQLite数据存储的通用设计 SQLite用于存储一些数据量较多,结构比较复杂情况,使用的时候只需要实现SQLiteOpenHelper,在onCreate创建数据表,onUpgrade做升级处理 通过Helper实例对DB进行数据处理,例如,database = dbHelper.getWritableDatabase();  获取DB对象进行插入,更新,删除操作,dbHelper.getReadableDatabase( 阅读详情

相关推荐

GreenDao基本使用

GreenDao基本使用,包括增删改查,一对一,一对多,多对多

GreenDao使用

一:什么是GreenDao 1.官网地址:https://github.com/greenrobot/greenDAO 2.greenDAO通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”),可以使用简单的面向对象API来存储、更新、删除和查询Java对象。 二:效果 三:GreenDao使用 1.在项目中的整体build.gradle使用添加依赖 buildscript { repositories { jcenter() mavenCentral

hanjiexuan的博客 624

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

数据库GreenDao(一):使用、升级、以及相关常用注释说明

数据库GreenDao的使用、升级、以及相关常用注释说明

u013083465的专栏 960

【驱动适配】高通sa522平台tac5x1x驱动适配全指南

本手册详细介绍了TAC5301-Q1音频编解码器在高通sa525平台Linux系统下的驱动适配流程。主要内容包括:1)TAC5301-Q1核心特性(车载级音频Codec、关键接口和功能);2)驱动适配依赖(高通声卡驱动、ALSA SoC框架等);3)I2S协议原理及主从模式说明;4)硬件准备与检查要点;5)完整的驱动移植步骤(代码移植、Kconfig/Makefile修改、设备树配置)。该手册适用于嵌入式音频开发工程师快速完成TAC5301-Q1芯片的驱动移植与验证工作。

嵌入式博哥的博客 302

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建

本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。

swift5iosmith的博客 911

Android GreenDao使用教程

一、Greendao简介      Greendao是一款用于数据库创建与管理的框架,由于原生SQLite语言比较复杂繁琐,使得不少程序员不得不去学习SQLite原生语言,但是学习成本高,效率低下,所以不少公司致力于开发一款简单的数据库管理框架,较为著名的就有Greendao和ORMLite,但是就数据分析来看,Greendao的效率是高于ORMLite及其他框架的,是目前该行业的领先者。也因为...

Seven丶Echo的博客 6万+

LIN协议栈 AUTOSAR架构下 状态管理

LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

汽车电子从业者,电子爱好者。 2050

Android中GreenDao数据库框架的使用

之前就用过这个数据库框架,一直没有事件写出来,今天终于有时间记录下啦。现在用的是3.2的版本,故以GreenDao的3.2的版本为主,记录下自己对这个框架的使用。1、了解GreenDao3.21)orm是对象与数据的映射,简而言之就是让java实体与数据库建立绑定的联系;2)我们所熟知的数据库又可分之为层次式数据库、网络式数据库和关系式数据库三种,然而我们在使用时有经常分为关系型和非关系型两种;关...

smxueer的专栏 1657

避坑指南:QT Creator报Unknown module(s) in QT: serialport的5种解决方法

本文详细解析了Qt Creator报'Unknown module(s) in QT: serialport'错误的5种解决方法,包括检查Qt版本兼容性、安装缺失组件、配置Kit环境等。针对Windows和Linux平台提供具体操作步骤,帮助开发者快速解决串口通信模块问题,提升开发效率。

weixin_29197051的博客 156

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 527

greenDAO讲义(二):数据库查询篇

上一篇中我们讲述了如何创建generator工程以及如何在android工程中使用。那么在这篇中就重点讲述下使用篇,主要针对数据库查询操作。 1. 查询 -- Queries     1)你可以使用原生的SQl(raw sql)语句;     2)也可以使用推荐的方法:使用greenDAO提供的QueryBuilder的API。     3)查询还支持结果延

晓阳 1618

基于YOLOv11的军事目标识别系统设计与实现(坦克、舰船检测)

DOTA-v2.0(包含多种军事装备的航拍图像)图片数量:11,268类别:18类,包括坦克、舰船、战斗机等分辨率:800×800~4000×4000HRSC2016(高分辨率舰船检测数据集)图片数量:1,061类别:舰船及子类特点:包含多种视角和复杂背景图片数量:5,000+类别:22种军用飞机标注:精确边界框自建数据集建议收集来源:公开军事演习视频、卫星图像、模拟游戏截图数据增强:模拟不同天气、遮挡、低光照等战场环境。

YOLO 450

Innodb 与自增长auto_increment

Innodb与Myisam存储引擎对auto_crement的限制: Innodb中自增长的列必须是索引,同时必须是索引的第一个列,否则会报如下错误:there can be only one column and it must be defined as a key;MyISAM没有这个限制。 MyISAM采用表锁设计,自增长不用考虑并发问题; auto_inc...

weixin_34309543的博客 244

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-知识图谱制作、使用、dify集成

本文探讨了在构建本地RAG(Retrieval-Augmented Generation)系统时,如何通过引入知识图谱来增强系统的知识理解能力。传统的向量数据库和嵌入模型虽然能处理语义匹配,但无法有效捕捉知识间的关联性。知识图谱通过“实体-关系-属性”的结构化表示,能够更好地支持推理、推荐和多跳问答等高级功能。文章详细介绍了知识图谱的基本概念、制作思路,以及如何使用Neo4j图数据库进行知识图谱的构建和查询。通过实例展示了从PDF文件解析到知识图谱入库的全过程,强调了知识图谱在提升RAG系统性能中的重要作用

少说,多做 560

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android数据库框架设计一

前言Android开发中我们或多或少都会接触到数据库。Android中提供了一个占用内存极小的关系型数据库-SQLite。虽然Android系统中提供了许多操作SQLite的API,但是我们还是需要手动去编写SQL语句,这经常会出现一些莫名其妙的问题。所以便出现了许多ORM(对象关系映射)框架。其中比较著名的有GreenDao、OrmLite、Litepal等。    常用的数据框架:数据库框架访...

杨的博客 4544

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

关于GreenDao你应该知道的小技巧

【前言】相信大家在开发中已经使用过GreenDao(What? 还没用过,造起来吧,Now!), 深深地被它的轻量、便捷、迅速、高效这些魅力所吸引了吧。哈哈,本篇博客, 不是要介绍它的使用方式,也不是它的实现原理。没错,就是开发中会遇到的, 关于数据库升级后,如何保证原有数据不丢失。【背景描述】假设APP第一个版本,只需要一张表Student,这张表只有两个属性(除了id),name和 ag

没有功夫的熊猫2 的博客 1074

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

GrenDao配置,简单的增删改查

今天用到了GreenDao数据查询,非常的简单,就是刚开始配置的时候有点小麻烦,用起来还是可以的,总之不用再去写sql语句了,! 接下来就给大家带来GreenDao的配置: 在App.build中:apply plugin: 'org.greenrobot.greendao' 然后写入版本信息,同时要是升级版本号,直接就可以将1改变就可以了,很简单的,版本号下边,就是自己的包名,改一下就

笔片 562

GreenDao3.1用法详解

greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。 GreenDao 优点: 1.性能高,号称Android最快的关系型数据库 2.内存占用小 3.库文件比较小,小于100K 4.支持数据库加密 greendao支持SQLCipher进行数据库加密 5.简洁易用的API Gree

wl1769127285的专栏 1万+

GreenDao配置及使用

一:配置 1.在项目的build.gradle下加 dependencies { //greenDao生产代码插件 classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’ // add plugin } 2.在Module下的build.gradle文件加 apply plugin: ‘org.greenrobot.greendao’ // apply plugin android { … //greendao配置 greendao { //数据库版本

qq_46237697的博客 1483

GreenDao3使用教程

官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。 GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的API 最小的内存开销 依赖体积小 支持数据库加密 强大的社区支持 GreenDao配置 buildscript { repositories {...

qq_36699930的博客 1万+

GreenDao的使用步骤及简单使用

greenDao的使用步骤: 第一步:  在项目的.gradle文件里面添加 buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2

ht1063899049的博客 7903

Android ORM框架 GreenDao3.0的使用

前言之前用过许多的Orm框架,例如:ORMLite、greendao、ormndroid、androrm、ActiveAndroid,SugarORM等等,不过都没有一一研究,感觉GreenDao的文档和支持率比较高,所以就一直采用了GreenDao作为项目的Orm框架,关于这些框架的大致分析,可以看我Csdn的文章Android Orm框架分析 ,回到正题,我之前用的还是GreenDao的2.x版

戴定康的博客 1201

Android GreenDao使用总结(包括模型生成、增删改查、修改存储路径、数据库更新升级和加解密数据库)

前言:      在Android开发中,或多或少总要接触SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。而greenDAO号称是速度最快的ORM(见官网)。

骑行大地的专栏 1万+

GreenDao 3.X之注解

在注解横行的时代,GreenDao 需要通过新建GreenDaoGenerator工程生成Java数据对象(实体)和DAO对象,已经追赶不上时代前行的步伐了。GreenDao 3.X的注解开发模式,终于解开它的面纱,GreenDao  3.X最大的变化就是采 用注解的方式通过编译方式生成Java数据对象和DAO对象。 Gradle配置 buildscript {

行云间 1万+

Android 微信,QQ,新浪三方登录及分享官方SDK集成

集成过程中踩了不少坑,我会尽量写的详细一点。 微信 关于开发平台申请appID,appSecret,下载SDK等步骤不表。 环境配置 libammsdk.jar导入lib,androidManifest中添加基本权限 name="android.permission.INTERNET"/> name="android.permission.ACCESS_NETWORK_STATE

ChatHello的博客 2105
上一篇: Android WebView----java与javaScript交互
下一篇: 【Android】多渠道打包,其实可以更快
ChatHello
博客等级 码龄11年 43粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值