package net.basilwang.dao; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import net.basilwang.migrations.Migration; import net.basilwang.migrations.V10Migration; import net.basilwang.migrations.V12Migration; import net.basilwang.migrations.V13Migration; import net.basilwang.migrations.V14Migration; import net.basilwang.migrations.V15Migration; import net.basilwang.migrations.V16Migration; import net.basilwang.migrations.V1Migration; import net.basilwang.migrations.V2Migration; import net.basilwang.migrations.V8Migration; import net.basilwang.migrations.V9Migration; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class TASQLiteOpenHelper extends SQLiteOpenHelper { private static final String TAG = "TASQLiteOpenHelper"; private static final String name = "undergraduate"; // 数据库名称 private static final int version = 16; // 数据库版本 private static final SortedMap<Integer, Migration> ALL_MIGRATIONS = new TreeMap<Integer, Migration>(); static { ALL_MIGRATIONS.put(1, new V1Migration()); ALL_MIGRATIONS.put(2, new V2Migration()); ALL_MIGRATIONS.put(8, new V8Migration()); ALL_MIGRATIONS.put(9, new V9Migration()); ALL_MIGRATIONS.put(10, new V10Migration()); // v11 has never released ALL_MIGRATIONS.put(12, new V12Migration()); ALL_MIGRATIONS.put(13, new V13Migration()); ALL_MIGRATIONS.put(14, new V14Migration()); ALL_MIGRATIONS.put(15, new V15Migration()); ALL_MIGRATIONS.put(16, new V16Migration()); } public TASQLiteOpenHelper(Context context) { /** * CursorFactory指定在执行查询时获得一个游标实例的工厂类。 设置为null,则使用系统默认的工厂类。 */ super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { executeMigrations(db, ALL_MIGRATIONS.keySet()); } private void executeMigrations(SQLiteDatabase db, Set<Integer> migrationVersions) { for (Integer version : migrationVersions) { Log.i(TAG, "Migrating to version " + version); ALL_MIGRATIONS.get(version).migrate(db); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion); SortedMap<Integer, Migration> migrations = ALL_MIGRATIONS.subMap( oldVersion, newVersion); executeMigrations(db, migrations.keySet()); } }