SQLite 是在 Xamarin.Forms 应用中实现 SQL 数据库的推荐方法。
这是将 SQLite 添加到 Xamarin.Forms 应用程序的演练!
演练
1。添加 SQLite NuGet 包
将@Frank Krueger创建的SQLite-net NuGet添加到您解决方案中的每个项目中;即将这个 NuGet 包添加到您的 Xamarin.Forms PCL、Android 项目等中。
2。创建数据库类
将此类添加到您的 Xamarin.Forms PCL。
此数据库类将用于将数据保存到您的 SQLite 数据库,以及从您的 SQLite 数据库中加载数据。
public class Database
{
#region Constant Fields
readonly static object _locker = new object();
readonly SQLiteConnection _database;
#endregion
#region Constructors
public Database()
{
_database = DependencyService.Get<ISQLite>().GetConnection();
_database.CreateTable<DataModel>();
}
#endregion
#region Methods
public async Task<IList<DataModel>> GetAllDataAsync()
{
return await Task.Run(() =>
{
lock (_locker)
{
return _database.Table<DataModel>().ToList();
}
});
}
public async Task<int> SaveDataAsync(DataModel dataModel)
{
var isDataInDatabase = (await GetAllDataAsync()).FirstOrDefault(x => x.Equals(dataModel)) != null;
return await Task.Run(() =>
{
if (isDataInDatabase)
{
lock (_locker)
{
_database.Update(dataModel);
}
return dataModel.ID;
}
lock (_locker)
{
return _database.Insert(dataModel);
}
});
}
#endregion
3。创建 ISQLite 接口
将此接口添加到 Xamarin.Forms PCL。
此接口将允许您使用依赖服务通过特定于平台的 API 检索数据库连接
public interface ISQLite
{
SQLiteConnection GetConnection();
}
4。创建 ISQLite 的 iOS 实现
将此类添加到您的 Android PCL
此 ISQLite 数据库实现将使用 Xamarin.Android 文件夹路径检索数据库连接。
[assembly: Dependency(typeof(SQLite_Android))]
namespace SampleApp.Droid
{
public class SQLite_Android : ISQLite
{
#region ISQLite implementation
public SQLiteConnection GetConnection()
{
var sqliteFilename = "SQLiteDatabase.db3";
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
var path = Path.Combine(documentsPath, sqliteFilename);
var conn = new SQLiteConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);
// Return the database connection
return conn;
}
#endregion
}
}
5。在 App.cs 中,将静态实现添加到数据库中
将此 Database.cs 的静态实现添加到 Xamarin.Forms PCL 的 App 类中。
public class App : Application
{
static OpportunityModelDatabase _database;
...
public static OpportunityModelDatabase Database =>
_database ?? (_database = new OpportunityModelDatabase());
}
6。现在从您应用中的任何位置访问数据库数据
这是一个如何从不同类中检索数据的示例
var AllData = await App.Database.GetAllDataAsync();
示例应用
这是我创建的示例应用程序,它演示了如何在 Xamarin.Forms 应用程序中实现 SQLite。随意下载它以更好地了解如何实现 SQLite!
https://github.com/brminnick/InvestmentDataSampleApp