在共享项目中使用 SQLite.NET

SQLite.NET 是一个开源库,可以在 Xamarin.Forms 项目中使用 SQLite 版本 3 添加本地数据库支持。

以下步骤演示了如何在 Xamarin.Forms 共享项目中包含此组件:

  1. 下载最新版本的 SQLite.cs 类并将其添加到共享项目中。

  2. 将包含在数据库中的每个表都需要建模为共享项目中的类。通过在类中添加至少两个属性来定义表: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; }
    }
}
  1. 接下来,添加一个名为 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);
        }
    }
}
  1. 正如你在上一步中看到的,我们的 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();
    }
}
  1. 现在,只要你需要对 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);
}