GreenDao数据库升级
2018-01-05 15:17
302 查看
在将apk发包出去后需要改动Entity的元素,就需要升级数据库。
这时看具体需求,一是不需要原有数据,清除数据库;二是需要保留原有数据。
greendao默认使用的是第一种:
Daomaster:
这里只说第二种情况。
那么需要升级需要如下操作:
自定义 Daomaster ,在 Application中申明
更改数据库版本号
添加需要增加的字段
在 CameraTime 中增加 test属性
MyDaoMaster:
在 onUpgrade 方法中,当旧版本号为1时,增加一个 test 的字段在 CameraTime 表中。
不知道数据库表的命名规则的话,可以将数据库导出本地打开看即可。
在 MyDaoMashter 和 build.gradle 中改变版本号
apk安装在版本号为1的的时候即可生效。
这时看具体需求,一是不需要原有数据,清除数据库;二是需要保留原有数据。
greendao默认使用的是第一种:
Daomaster:
public static class DevOpenHelper extends OpenHelper { public DevOpenHelper(Context context, String name) { super(context, name); } public DevOpenHelper(Context context, String name, CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); dropAllTables(db, true); onCreate(db); } }
这里只说第二种情况。
那么需要升级需要如下操作:
自定义 Daomaster ,在 Application中申明
更改数据库版本号
添加需要增加的字段
在 CameraTime 中增加 test属性
@Entity public class CameraTime { @Id private Long id; private String time; private String standUuid; public String test; }
MyDaoMaster:
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import org.greenrobot.greendao.AbstractDaoMaster; import org.greenrobot.greendao.AbstractDaoSession; import org.greenrobot.greendao.database.Database; import org.greenrobot.greendao.database.DatabaseOpenHelper; import org.greenrobot.greendao.identityscope.IdentityScopeType; /** * Created by zhangli * * @time 2018/1/5 */ public class MyDaoMaster extends AbstractDaoMaster { public static final int SCHEMA_VERSION = 2; public MyDaoMaster(Database db, int schemaVersion) { super(db, schemaVersion); } @Override public AbstractDaoSession newSession() { return null; } @Override public AbstractDaoSession newSession(IdentityScopeType type) { return null; } public static void createAllTables(Database db, boolean ifNotExists) { CameraEntityDao.createTable(db, ifNotExists); CameraTimeDao.createTable(db, ifNotExists); FaroEntityDao.createTable(db, ifNotExists); FaroFileDao.createTable(db, ifNotExists); FloorPlanPictureDao.createTable(db, ifNotExists); PictureMatrixDao.createTable(db, ifNotExists); ProjectDao.createTable(db, ifNotExists); StandingEntityDao.createTable(db, ifNotExists); UpDataIdDao.createTable(db, ifNotExists); UserDao.createTable(db, ifNotExists); ImageRowDao.createTable(db, ifNotExists); } /** Drops underlying database table using DAOs. */ public static void dropAllTables(Database db, boolean ifExists) { CameraEntityDao.dropTable(db, ifExists); CameraTimeDao.dropTable(db, ifExists); FaroEntityDao.dropTable(db, ifExists); FaroFileDao.dropTable(db, ifExists); FloorPlanPictureDao.dropTable(db, ifExists); PictureMatrixDao.dropTable(db, ifExists); ProjectDao.dropTable(db, ifExists); StandingEntityDao.dropTable(db, ifExists); UpDataIdDao.dropTable(db, ifExists); UserDao.dropTable(db, ifExists); ImageRowDao.dropTable(db, ifExists); } public static abstract class OpenHelper extends DatabaseOpenHelper { public OpenHelper(Context context, String name) { super(context, name, SCHEMA_VERSION); } public OpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory, SCHEMA_VERSION); } @Override public void onCreate(Database db) { Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); createAllTables(db, false); } } /** WARNING: Drops all table on Upgrade! Use only during development. */ public static class DevOpenHelper extends OpenHelper { public DevOpenHelper(Context context, String name) { super(context, name); } public DevOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); switch (oldVersion) { case 1: CameraTimeDao.createTable(db, true); db.execSQL("ALTER TABLE 'CAMERA_TIME' ADD 'TEST' TEXT;"); break; } } } }
在 onUpgrade 方法中,当旧版本号为1时,增加一个 test 的字段在 CameraTime 表中。
不知道数据库表的命名规则的话,可以将数据库导出本地打开看即可。
在 MyDaoMashter 和 build.gradle 中改变版本号
greendao { schemaVersion 2 daoPackage 'com.build.scan.greendao.gen' targetGenDir 'src/main/java' }
apk安装在版本号为1的的时候即可生效。
相关文章推荐
- GreenDAO数据库版本升级
- GreenDao数据库升级解决方案
- greenDao数据库升级
- Greendao数据库升级与使用详解
- Android ORM 框架:GreenDao 数据库升级
- Android GreenDao使用总结(包括模型生成、增删改查、修改存储路径、数据库更新升级和加解密数据库)
- GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
- Greendao 3.X 数据库升级,新增int、long数据类型字段NOT NULL 解决方案
- 记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯
- Android框架学习之GreenDao(二)数据库升级
- greendao 数据库升级
- Greendao 数据库升级解决方案
- Android ORM 框架:GreenDao 数据库升级
- greendao数据库升级
- greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级
- GreenDao设置数据库路径以及数据库升级
- greendao操作数据库升级导致表数据丢失
- GreenDAO数据库版本升级
- GreenDao数据库升级方案
- greendao数据库升级添加字段,修改版本后,所引发的问题