我终于有时间深入了解这一点,并意识到在旧表格中保留数据的同时添加新表格非常容易。
免责声明:当我意识到这一点的实现是具体到我的情况,我认为这是有帮助的对像我这样谁使用的是Android ORM工具(greenDao)专门对付Android上的SQLite。我知道这对于那些从一开始就编写了自己的表创建查询的人来说是非常常见的,但对于那些不熟悉使用Android的SQLite DB的人来说,我认为这个例子会很有帮助。
答案: 您可以修改DevOpenHelper内部类或创建自己的类。我选择暂时编辑DevOpenHelper以保持我的示例简单 - 但请注意,如果重新生成greendao类,DevOpenHelper将被覆盖。创建自己的类如“MyOpenHelper”并使用它会更好。
我的变化之前,DevOpenHelper.onUpgrade是这样的:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}
不是丢弃所有表,看看该createAllTables方法是自动生成的GreenDao。
重写onUpgrade以检查“oldVersion”是否是您要升级的“oldVersion”,然后只调用createTable方法以查找“新”表。这里是我的onUpgrade方法是什么样子现在:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " +
//Going from older schema to new schema
if(oldVersion == 3 && newVersion == 4)
{
boolean ifNotExists = false;
//Leave old tables alone and only create ones that didn't exist
//in the previous schema
NewTable1Dao.createTable(db, ifNotExists);
NewTable2Dao.createTable(db, ifNotExists);
NewTable3Dao.createTable(db, ifNotExists);
NewTable4Dao.createTable(db, ifNotExists);
}
else
{
dropAllTables(db, true);
onCreate(db);
}
}
添加新列有异曲同工之处,但你必须写一些SQL或看看自动生成的SQL创建greenDao和杠杆声明那些。
要添加一个新列(NEW_COLUMN,假设它是一个整数类型),以现有的表(EXISTING_TABLE),请执行下列操作:
db.execSQL("ALTER TABLE 'EXISTING_TABLE' ADD 'NEW_COLUMN' INTEGER");
对于我来说,现在,所有我需要做的是添加新的表格,所以这最终是相当直接的。希望别人认为这很有用。
这是一个简单但很好的解决方案 – 2014-01-13 21:59:27
你救了我一天的任何类,谢谢! – Ale 2016-06-16 15:25:53
我们在哪里设置新版本号? – MBH 2016-07-27 14:50:42