I want to release a NET Maui upgrade to my existing Xamarin Android app but as my users already have an SQLite database I need to be able up upgrade the app and retain the database.
My Xamarin app is using SQLiteOpenHelper and getting the user version @"PRAGMA user_version" = 8, but when I run the same query in the Maui app I get 0 as user_version. I'm using the same connection string on both apps: Data Source=/data/user/0/<my app id>/databases/my_database.db.
public partial class BaseHandler : Android.Database.Sqlite.SQLiteOpenHelper
{
private const string DB_NAME = "my_database.db";
Android.Content.Context _context;
private Android.Database.Sqlite.SQLiteDatabase _db = null;
public BaseHandler (IContext context) : base (context.AppContext, DB_NAME, null, DB_VERSION)
{
_context = context.AppContext;
_db = WritableDatabase;
var version = ExecuteScalar(@"PRAGMA user_version");
}
public override void OnCreate (Android.Database.Sqlite.SQLiteDatabase db)
{
var sqls = this.CreateDatabaseSql();
this.DoSql(db, sqls);
var version = ExecuteScalar(@"PRAGMA user_version");
}
The Maui app uses the sqlite-net-pcl package.
public async Task<IEnumerable<MyItem>> GetAllItems()
{
var sql = "SELECT * FROM MY_ITEMS;";
try
{
await using var cnn = GetCnn();
return await cnn.QueryAsync<MyItem>(sql);
}
catch (Exception ex)
{
throw ex;
}
}
What am I missing?