GreenDao简单使用和数据库升级
一 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