在共享项目中使用 SQLite.NET
SQLite.NET 是一个开源库,可以在 Xamarin.Forms
项目中使用 SQLite
版本 3 添加本地数据库支持。
以下步骤演示了如何在 Xamarin.Forms
共享项目中包含此组件:
-
下载最新版本的 SQLite.cs 类并将其添加到共享项目中。
-
将包含在数据库中的每个表都需要建模为共享项目中的类。通过在类中添加至少两个属性来定义表:
Table
(对于类)和PrimaryKey
(对于属性)。
对于此示例,将一个名为 Song
的新类添加到共享项目中,定义如下:
using System;
using SQLite;
namespace SongsApp
{
[Table("Song")]
public class Song
{
[PrimaryKey]
public string ID { get; set; }
public string SongName { get; set; }
public string SingerName { get; set; }
}
}
- 接下来,添加一个名为
Database
的新类,它继承自SQLiteConnection
类(包含在 SQLite.cs 中)。在这个新类中,定义了每个表的数据库访问,表创建和 CRUD 操作的代码。示例代码如下所示:
using System;
using System.Linq;
using System.Collections.Generic;
using SQLite;
namespace SongsApp
{
public class BaseDatos : SQLiteConnection
{
public BaseDatos(string path) : base(path)
{
Initialize();
}
void Initialize()
{
CreateTable<Song>();
}
public List<Song> GetSongs()
{
return Table<Song>().ToList();
}
public Song GetSong(string id)
{
return Table<Song>().Where(t => t.ID == id).First();
}
public bool AddSong(Song song)
{
Insert(song);
}
public bool UpdateSong(Song song)
{
Update(song);
}
public void DeleteSong(Song song)
{
Delete(song);
}
}
}
- 正如你在上一步中看到的,我们的
Database
类的构造函数包含一个path
参数,该参数表示存储 SQLite 数据库文件的文件的位置。可以在App.cs
中声明静态Database
对象。path
是特定于平台的:
public class App : Application
{
public static Database DB;
public App ()
{
string dbFile = "SongsDB.db3";
#if __ANDROID__
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var dbPath = System.IO.Path.Combine(docPath, dbFile);
#else
#if __IOS__
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string libPath = System.IO.Path.Combine(docPath, "..", "Library");
var dbPath = System.IO.Path.Combine(libPath, dbFile);
#else
var dbPath = System.IO.Path.Combine(ApplicationData.Current.LocalFolder.Path, dbFile);
#endif
#endif
DB = new Database(dbPath);
// The root page of your application
MainPage = new SongsPage();
}
}
- 现在,只要你需要对
Songs
表执行 CRUD 操作,只需通过App
类调用DB
对象。例如,要在用户单击按钮后插入新的Song
,你可以使用以下代码:
void AddNewSongButton_Click(object sender, EventArgs a)
{
Song s = new Song();
s.ID = Guid.NewGuid().ToString();
s.SongName = songNameEntry.Text;
s.SingerName = singerNameEntry.Text;
App.DB.AddSong(song);
}