在共享專案中使用 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);
}