当前位置: 移动技术网 > 移动技术>移动开发>Android > GreenDao简单使用和数据库升级

GreenDao简单使用和数据库升级

2020年07月08日  | 移动技术网移动技术  | 我要评论

一 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 排序
我们通常会使用以上注释,更多注释,大家可以查看:。

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网