先来看看代码:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("upgrade database");
upgrade(db);
}
/**
* 升级数据库
* @param db 数据库链接
*/
private void upgrade(SQLiteDatabase db) {
try {
XmlPullParser pullParser = Xml.newPullParser();
InputStream inputStream = DroidApplication.sContext.getAssets().open("open_droid.xml");
pullParser.setInput(inputStream, "utf-8");
int type = pullParser.getEventType();
while(type != XmlPullParser.END_DOCUMENT) {
if(type == XmlPullParser.START_TAG) {
// 获取mapping
if(pullParser.getName().equals(OpenDroidHelper.TAG_MAPPING)) {
dumpData(db, pullParser);
}
}
type = pullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
// 执行创建数据库
onCreate(db);
}
/**
* 将数据库中的数据转储到程序中
* @param db 数据库连接
* @param pullParser
* @throws Exception
*/
private void dumpData(SQLiteDatabase db, XmlPullParser pullParser)
throws Exception {
Class klass = (Class) Class.forName(pullParser.getAttributeValue(null, "class"));
String tableName = klass.getSimpleName(); // 表名
Cursor cursor = db.rawQuery("select * from " + tableName, null);
T t;
Method m;
String methodName;
String columnName;
// 遍历游标
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
t = (T) klass.newInstance(); // 通过反射进行实例化
final int columnCount = cursor.getColumnCount();
for(int i=0;i
@Override
public void onCreate(SQLiteDatabase db) {
for(String sql : OpenDroidHelper.getDBInfoBean().getSqls()) {
db.execSQL(sql);
}
// 还原数据
if(!mOldData.isEmpty()) {
for(OpenDroid item : mOldData) {
item.save(db);
}
}
}
private ArrayList mOldData = new ArrayList();
好了,至此,我们opendroid提供的一个简单的数据库升级方案就执行完了,而且我们的opendroid也介绍的差不多了,剩下的一点东西都是辅助性的东西。哦,对了,这里还要提一点:细心的朋友可能已经发现了,opendroid在操作完数据库并没有默认的关闭掉数据库,而是蛋疼的提供了open和release两个方法,不信可以看代码:
/**
* 打开数据库
*/
public static void open() {
if(sSqliteDatabase == null) {
sSqliteDatabase = sOpenHelper.getWritableDatabase();
}
}
/**
* 释放数据库
*/
public static void release() {
if(sSqliteDatabase != null && sSqliteDatabase.isOpen()) {
sSqliteDatabase.close();
}
sSqliteDatabase = null;
}
最后是opendroid的开源地址:http://git.oschina.net/qibin/OpenDroid