GreenDao3.0 · 数据库升级/新增与修改表

 

GreenDao3.0在数据库表修改表字段(也就是实体类对字段的修改),新增表(也就是新增实体类),都要进行GreenDao3.0数据库版本的修改其他升级配置。那么版本在哪里呢?

版本位置:

1.app->build.gradle文件:

2.上图中 daoPackage配置路径下->DaoMaster文件:

 

 

 

注意:

GreenDao3.0 增加或者修改数据类的字段的时候,增加字段只能增加String 类型

 

GreenDao数据库升级

修改/新增表

第1步:升级数据库版本号

app->build.gradle文件中对android - > greendao -> schemaVersion 值做+1处理

android {
    compileSdkVersion 25
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.sr.kywg"
        minSdkVersion 16
        targetSdkVersion 25     
    }
  

    greendao {       
        schemaVersion 2  //数据库的schema版本,也可以理解为数据库版本号,升级版本号 + 1
        //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。
        daoPackage 'com.demo.gd.greendao'
        //设置DaoMaster、DaoSession、Dao目录
        targetGenDir 'src/main/java'
//        generateTests false //设置为true以自动生成单元测试。
//        targetGenDirTests 'src/main/java' //应存储生成的单元测试的基本目录。默认为 src / androidTest / java。
    }


  
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
  
}

第2步:修改数据库对应的实体类

@Entity
public class Person {

    @Id(autoincrement = true)
    private Long id;

    @NotNull
    private String name;

    private Integer age; // 增加一个年龄字段
}

                                

 

第3步:自定义OpenHelper对象(重写数据库升级方法)

然后,新增加表的时候(也就是增加一个新的数据类),需要在升级这里设置一下,必须把这个 

  •      DaoMaster.createAllTables(db, true);  //第二个参数改成ture
  •      DaoMaster.dropAllTables(db, true);   //第二个参数改成ture

不然会报Caused by: android.database.sqlite.SQLiteException: no such table: 表名  

/**
 * CN:      GreenDaoUpgradeHelper
 * Author: DINGCL (dingcl@jsyl.com.cn)
 * Date:   
 * Des:    数据库升级辅助类
 */
public class GreenDaoUpgradeHelper extends DaoMaster.OpenHelper {
    public GreenDaoUpgradeHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }
    //这里重写onUpgrade方法
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
            @Override
            public void onCreateAllTables(Database db, boolean ifNotExists) {
                DaoMaster.createAllTables(db, true);
            }

            @Override
            public void onDropAllTables(Database db, boolean ifExists) {
                DaoMaster.dropAllTables(db, true);
            }
            //注意此处的参数StudentDao.class,很重要(一开始没注意,给坑了一下),它就是需要升级的table的Dao,
            //不填的话数据丢失,
            // 这里可以放多个Dao.class,也就是可以做到很多table的安全升级
        }, NFCInfoBeanDao.class);
    }
}

 

特殊说明

其中,MigrationHelper是一个GreenDao3.0升级辅助框架。

      - 在 app -> build.gradle -> dependencies 下进行引入框架依赖:

implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.0.0'

 

第4步:替换默认的DevOpenHelper

 

public class BaseApplication extends Application{

    @Override
	public void onCreate() {
		super.onCreate();
		
		//GreenDao初始化及配置
		setDatabase();
    }

    
    /**
     * 配置greenDao
     */
	private void setDatabase() {

		// 通过DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的SQLiteOpenHelper 对象。
		// 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为greenDAO。
		// 注意:默认的DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
		// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
		GreenDaoUpgradeHelper mHelper = new GreenDaoUpgradeHelper(this,"KYWG-db", null);
		db = mHelper.getWritableDatabase();
		// 注意:该数据库连接属于DaoMaster,所以多个 Session 指的是相同的数据库连接。
		mDaoMaster = new DaoMaster(db);
		mDaoSession = mDaoMaster.newSession();

	}

	public DaoSession getDaoSession() {
		return mDaoSession;
	}
	public SQLiteDatabase getDb() {
		return db;
	}

}

 

重新编译并运行工程,即可完成数据库升级。

Migration Helper class

  1. The class catch all the Daos that you got
  2. Creates the temporary tables based on the old version's scheme (generateTempTables method)
  3. Import all the data to this new tables (generateTempTables method)
  4. Drop all the tables of the old version (DaoMaster.dropAllTables method)
  5. Creates the tables of the new version (DaoMaster.createAllTables method)
  6. Updates the new version's tables from the temporaries (restoreData method)
  7. Drop all temporary tables (restoreData method)

参考资料:GreenDAO schema update and data migration?


增加表,获取等基本用法、,请自行查阅官网进行使用,注意操作这些步骤之前请先进行数据升级操作及配置



作者:maiduoduo

邮箱:maiduoduo0@163.com /  jfox.zxj@gmail.com

Github:

CSDN:

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要使用SQLitestudio打开GreenDAO加密数据库,需要按照以下步骤进行: 1. 首先,确保你已经安装了SQLitestudio,可以从官方网站下载并安装。 2. 打开SQLitestudio并点击"文件"菜单,选择"打开数据库"选项。 3. 在打开的对话框中,浏览文件系统并选择你要打开的GreenDAO加密数据库文件,然后点击"打开"按钮。 4. 在"解密数据库"对话框中,输入你设置的GreenDAO数据库的加密密码,并确保"使用GreenDAO加密"选项被选中。 5. 点击"确定"按钮,SQLitestudio会尝试用你提供的密码解密数据库文件。 6. 如果密码正确,数据库将被成功解密并显示在SQLitestudio的主窗口中。 7. 现在你可以对数据库进行各种操作了,比如查看结构、查询数据等。 需要注意的是,SQLitestudio虽然可以打开和操作GreenDAO加密数据库,但它并不直接支持GreenDAO的特定功能,比如自动生成的实体类和数据访问对象(DAO)。如果你需要使用这些功能,建议使用GreenDAO提供的自动生成工具和API来操作数据库。 ### 回答2: 要使用SqliteStudio打开GreenDAO加密数据库,需要按照以下步骤进行操作: 1. 首先,下载并安装SqliteStudio软件,确保已经在计算机上正确安装并启动。 2. 打开SqliteStudio,点击菜单栏中的“数据库”选项,选择“连接到数据库”。 3. 在弹出的对话框中,选择“SQLite”作为数据库类型,然后点击“继续”。 4. 在“数据库文件”字段中,浏览到保存加密数据库的文件路径,并选择要打开的GreenDAO加密数据库文件。 5. 在“密码”字段中,输入用于加密数据库的密码。确保密码与原始数据库加密方式一致,否则无法正确打开。 6. 在“配置文件”字段中,选择相应的配置文件,如果没有则选择“默认配置”。 7. 点击“测试连接”按钮,确保连接设置正确,如果测试通过则点击“连接”。 8. 等待一段时间,SqliteStudio将连接到GreenDAO加密数据库,并在左侧的导航栏中显示数据库和视图。 9. 现在,可以浏览和编辑数据库中的和数据,执行自定义的SQL查询等操作。 10. 在使用完毕后,记得点击SqliteStudio菜单栏中的“断开连接”选项,以确保数据库的同步和安全关闭。 总结:通过以上步骤,我们就可以使用SqliteStudio打开GreenDAO加密数据库。请注意,这些步骤仅适用于已加密的GreenDAO数据库,如果数据库没有加密或使用其他加密方式,则无法通过这种方式打开。 ### 回答3: 要使用SQLiteStudio打开GreenDao加密的数据库,需要按照以下步骤操作: 1. 确保已经安装并启动SQLiteStudio软件。 2. 打开SQLiteStudio软件后,点击菜单栏中的“文件”,选择“打开数据库”选项。 3. 在弹出的对话框中,选择要打开的加密数据库文件,点击“打开”。 4. 然后,弹出的对话框会要求输入数据库密码。输入正确的密码,点击“确定”。 5. 如果密码正确,SQLiteStudio将会打开该加密数据库,并显示其中的格和数据。 注意事项: - 确保输入的密码正确,否则将无法打开加密数据库。 - 如果忘记了数据库密码,无法使用SQLiteStudio直接打开数据库,除非通过其他方式找回密码或者重新创建一个未加密的数据库。 希望以上步骤能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值