我喜欢使用内置的SQLiteOpenHelper
类来维护Sqlite版本号并提供升级数据库的过程。
使用内置Android.Database.Sqlite.SQLiteOpenHelper
您可以轻松地用它来保持你的数据库版本,如果版本更改,删除数据库,并开始为空白(不表/无数据)新鲜。
记住:这是破坏性的 “升级版” ......
public class SqliteOnVersionChangeCreateBlankDB : SQLiteOpenHelper
{
new const string DatabaseName = "myDBName";
const int DatabaseVersion = 1;
public SqliteOnVersionChangeCreateBlankDB(Context context) : base(context, DatabaseName, null, DatabaseVersion)
{
}
public override SQLiteDatabase ReadableDatabase
{
get
{
try
{
return base.ReadableDatabase;
}
catch
{
File.Delete(DatabaseName);
return base.WritableDatabase;
}
}
}
public override void OnCreate(SQLiteDatabase db)
{
Console.WriteLine($"{db}");
// You can create the DB tables/data here if needed...
// or use your favorite SQLite framework/library later...
}
public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Console.WriteLine($"{db}:{oldVersion}:{newVersion}");
if (oldVersion < newVersion)
{
// Normally this is where you would alter the existing schema to the new version
// but this is a destructive upgrade.
db.Close();
File.Delete(db.Path);
}
}
}
用法:
const int DatabaseVersion = 1;
:
与在SQLiteOpenHelper的子类版本的启动执行此代码:
var sqliteHelper = new SqliteOnVersionChangeCreateBlankDB(this);
var db = sqliteHelper.ReadableDatabase;
db.Close();
你现在有一个空白的数据库,分配版本1.它是空的,没有表/数据,所以用你最喜欢的Sqlite ORM /框架/库来创建表和填充数据...
除非数据库版本改变,每次你的应用程序启动不会删除现有的数据库执行此代码:
var sqliteHelper = new SqliteOnVersionChangeCreateBlankDB(this);
var db = sqliteHelper.ReadableDatabase;
db.Close();
后来,应用程序的更新,您还需要更改数据库,所以在这种情况下,将高于最后的新版本号()分配给数据库。
const int DatabaseVersion = 2;
执行相同的代码之前:
var sqliteHelper = new SqliteOnVersionChangeCreateBlankDB(this);
var db = sqliteHelper.ReadableDatabase;
db.Close();
现在再有一个空数据库,但它被分配版本2.同样你最喜欢的sqlite的ORM /框架/库来创建表和用数据填充它...
我使用的是Frank Krueger的sqlite-net。我创建了自己的数据库处理程序来创建和删除表。如果我使用SQLiteOpenHelper,是否必须将所有代码转移给它? – GaryP
它给了我2个数据库;一个在文件下,另一个在数据库下,因为我使用了我自己的类。 – GaryP
@GaryP完全没有问题,继续使用'sqlite-net',只需在通过sqlite-net连接打开之前使用子类型的SQLiteOpenHelper,然后在那里处理版本控制,然后使用'sqlite-net'到're创建“您的表/数据.... – SushiHangover