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