我们在手机开发过程中,使用最多的就是Sqlite数据库了,而android的开发,大部分人使用了xutils框架。
但是当我们数据库升级,想替换主键,或者增加UNIQUE约束等等的时候就会发现比较麻烦,xutils提供的接口好像很难来实现这些升级需求。其实,很多时候也不是xutils不给我们实现,而是sqlite数据库本身就不建议这么做。我们可以参照下官网的说法:
由此可见,sqlite数据库建议的升级方式,就是新建表,数据转移,并删除原来的旧表。
对应到xutils上,其实很简单,我们只需要在原有表对应的类上,将
@Table(name = "xxxxxx")
public class AAAA {
......
}
Table注解里的名字改一下,然后直接将原来的类里面的column修改好就行,这样xutils下次会自动生成一张新表,然后在数据库升级的地方,我们用原生的sql将原来表里的数据取出来,然后塞到新表里就行了:
try {
Cursor cursor = db.execQuery("select * from 旧表名");
cursor.moveToFirst();
do {
AAAA aaaa = new AAAA();
// 直接将数据取出塞到新表对应的类对象即可
aaaa.set列名(cursor.getString(cursor.getColumnIndex("列名")));
.......
db.save(aaaa); // 保存到新表
} while (cursor.moveToNext());
} catch (DbException e) {
e.printStackTrace();
}