欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

GreenDao简单使用和数据库升级

程序员文章站 2022-07-08 10:10:19
一 GreenDao的配置学习/参考地址:GreenDao3.0数据库的简单使用GreenDAO数据库升级1、在根目录的build.gradle文件中添加:dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'// add plugin}allprojects { reposi...

一 GreenDao的配置

学习/参考地址: 
GreenDao3.0数据库的简单使用
GreenDAO数据库升级

1、在根目录的build.gradle文件中添加:
dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'// add plugin
}
allprojects {
    repositories {
        jcenter()
        mavenCentral() //添加存储库,注意添加的位置
    }
}
2、在应用module下的build.gradle文件:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}
3、自定义路径,在app的gradle文件中配置数据库信息:
greendao {
    schemaVersion 1
    daoPackage 'com.anye.greendao.gen'
    targetGenDir 'src/main/java'
}

二 Greendao的使用

2.1、创建数据库表
@Entity
public class Student {
    @Id
    private Long id;
    private String name;//姓名
    private Long age;//年龄
    private int classes;//班级
}

创建完成后,点击Make Project ,greendao会帮我们自动生成数据库表

创建数据库表需要注释:
@Entity 标识实体类,GreenDao会映射成sqlite中的一个表
@Id 标识主键
@Transient 标识该属性将不会映射到表中,也就是没有这列,不存储在数据库中
@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)
@NotNull 非空
@Unique 唯一约束
@ToMany 一对多
@OrderBy 排序
我们通常会使用以上注释,更多注释,大家可以查看:GreenDao注释帮助文档

2.2、创建数据库
public class APPAplication extends Application {
    private static final String DBNAME = "person_db";
    private static DaoSession mDaoSession;
    
    @Override
    public void onCreate() {
        super.onCreate();
        initGreenDao();
    }
    
    public void initGreenDao() {
        DaoMaster.DevOpenHelper openHelper = new  DaoMaster.DevOpenHelper(this,DBNAME){
            @Override
            public void onUpgrade(Database db, int oldVersion, int newVersion) {
           
                /* 数据库升级时使用 */
                
                int currentVersion = upgradeDB(db, oldVersion, newVersion);
                if (currentVersion != newVersion) {
                    super.onUpgrade(db, oldVersion, newVersion);
                }
            }
        };
        Database writableDb = openHelper.getWritableDb();
        DaoMaster daoMaster = new DaoMaster(writableDb);
        mDaoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoSession() {
        return mDaoSession;
    }

三 数据操作

1、获取表对象
StudentDao mUserDao
private HistoryBeanDao getUserDao() {
        if (mUserDao == null) {
            mUserDao = APPAplication.getDaoSession().getStudentDao();
        }
        return mUserDao;
    }
 
2、插入单条数据
getUserDao().insert(user);
3、 删除数据
 mStudentDao.delete(studen
4、更新数据
mStudentDao.update(student);
5、 查找数据
// 按年龄排序分页查询
List<Student> users = getUserDao()
                    .queryBuilder()
                    .orderDesc(HistoryBeanDao.Properties.Age)
                    .offset(2*20)  
                    .limit(15)
                    .list();

四 数据库升级

1、 在表中增加某一列

​ 在Student中加入Address 属性

1)将Student 实体类中 带有@Generated(hash = xx)样式的构造方法删除

@Generated(hash = 36359539)
public Student(Long id, String name, Long age, int classes) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.classes = classes;
}
@Generated(hash = 1556870573)
public Student() {
}

2)增加属性并添加Set,get方法

private String address;//地址

3) 重新 Make Project 生成新的带有@Generated的构造方法

4)找到自定义路径中的 StudentDao文件

/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
    String constraint = ifNotExists? "IF NOT EXISTS ": "";
    db.execSQL("CREATE TABLE " + constraint + "\"STUDENT\" (" + //
            "\"_id\" INTEGER PRIMARY KEY ," + // 0: id
            "\"NAME\" TEXT," + // 1: name
            "\"AGE\" INTEGER," + // 2: age
            "\"ADDRESS\" TEXT," + // 3: address
            "\"CLASSES\" INTEGER NOT NULL );"); // 4: classes
}

5)在Application中的onUpgrade方法中判断数据库版本号 并 更新内容

​ 找出 StudentDao文件中的 表名( STUDENT ) 列 名(ADDRESS)参数类型(TEXT)

if (oldVersion == 1) {
    db.execSQL("ALTER TABLE " + "\"STUDENT\""
            + " ADD COLUMN \"ADDRESS\" TEXT");
    currentVersion++;
}
if (oldVersion == 2) {
    /** 适配数据库跳版本更新*/
    currentVersion++;
}

6) 更新数据库版本号

greendao {
    schemaVersion 2
    daoPackage 'com.anye.greendao.gen'
    targetGenDir 'src/main/java'
}

7) 完成

2 、创建新的数据表

​ 1)创建新的数据库表 并 Make Project

​ 2)在Application中的onUpgrade方法中判断数据库版本号 、更新内容

       if (oldVersion == 1) {
    // 增加People表
        PeopleBeanDao.createTable(db, true);
        currentVersion++;
    }

​ 3) 更新数据库版本号

样例: (接 2.2、创建数据库中的upgradeDB() 方法)

public int upgradeDB(Database db, int oldVersion, int newVersion) {
    int currentVersion = 0;
    
    if (oldVersion == 1) {
    // 增加People表
        PeopleBeanDao.createTable(db, true);
        currentVersion++;
    }
    if (oldVersion == 2) {
    // 在表 STUDENT 中 添加 ADDRESS 属性
        db.execSQL("ALTER TABLE " + "\"STUDENT\""
                + " ADD COLUMN \"ADDRESS\" TEXT");
        currentVersion++;
    }
    if (oldVersion == 3) {
        // 在表 STUDENT 中 添加 SEX 属性

        db.execSQL("ALTER TABLE " + "\"STUDENT\""
                + " ADD COLUMN \"SEX\" TEXT");
        currentVersion++;
    }
    return currentVersion;
}

本文地址:https://blog.csdn.net/qq_29754547/article/details/107151545